find, grep, xargs...
Dan Lukes
dan at obluda.cz
Thu Apr 10 12:57:33 CEST 2008
Lubomir Majersky wrote:
> Najst medzi 10-kami tisic suborov, subory so vzorkou a tie nasledne
> prekopirovat (alebo presunut) do ineho adresara. Spolocnym znakom
> vsetkych tych suborov je, ze cast nazvu je rovnaka. Aby to bolo este
> zrozumitelnejsie, tak uvadzam zjednoduseny tvar nazvov suborov:
>
> "blabla000001", "blabla000002",..."blabla00000X",..."blablaXXXXXX"
> find . -type f -print | xargs grep -lE 'vzorka-XYZ' > ./vystup.txt &&
> grep -iE 'vzorka-ABC' ./vystup.txt | xargs -J % cp -p % ../adresar
Ale fuj ! ;-)
Tak to uz ten vzorek vytridim rovnou v tom findu, ne ?
find . -type f -name 'blabla*'
Mozna se ti to nepovedlo, pokuds ten parametr nenapsal do apostrofu
(nebo je potreba tu hvezdicku alespon oquotovat). Takze cele je to
takhle nejak:
find . -type f -name 'blabla*' | xargs cp -p {} ../adresar/
Teda, za predpokladu, ze nazvy souboru jsou "rozumne". Pokud by
obsahovaly nejake osklive znaky, treba znak konce radku, muselo by se to
jeste trochu doladit (pridat -print0 k findu, -0 k xargs)
> Skusal som pre find zapracovat "-exec" (samozrejme nie v takom zapise
> ako je vyssie uvedene), ale akosi sa neviem dopracovat k funkcnej
> konstrukcii.
A nebo tak (tim to bdue na jeden prikaz, bez xargs):
find . -type f -name 'blabla*' -exec cp {} ../adresar/ ";"
predpokladam, ze duvod, proc se ti to nepovedlo byl neoquotovany
strednik (nebo to, ze tam vubec nebyl).
Ale takhle to bude relativne pomale. Kdyz uz takhle, tak asi lepe
vyuzit zhanou novinku na poli findu:
find . -type f -name 'blabla*' -exec cp {} ../adresar/ "+"
Dan
More information about the Users-l
mailing list