Portál AbcLinuxu, 12. května 2025 09:08
Program Photorec mi vytvořil obnovu disku. Ve složece Obnova mám 52 složek, každou se stovkami souborů. Někde zde potřebuji vyhledat textový soubor .doc, který obsahuje slovo "buddha". Pomocí příkazu grep b.u.d.d.h.a *.doc umím vyhledat všechny .doc soubory obsahující slovo buddha, ale bohužel při tomto zadání nefunguje -r pro rekurzivní prohledávání složek a všech 52 složek se mi takto prohledáváat nechce.
Řešením by mohlo být vyhledat všechny *.doc soubory a vykopírovat je do jedné složky a zde použít grep, ale spousta souborů ma stejné jméno a já je nechci přepisovat.
Poradíte mi jak rekurzivně prohledat všechny složky, vykopírovat všechny soubory specifikované koncovkou (*.doc nebo *.odt) a v případě stejných jmen je automaticky přejmenovat? Děkuji
Řešení dotazu:
find -exec
Doufal jsem v konkrétní radu, ale nic, tak jsem se tedy vydal pátrat na vlastní pěst a našel jsem toto:
find /nejaka/cesta -type f -name "*.doc" -exec cp {} /nejaka/cesta/vycuc/???.doc \;
hledá v adresáři /nejaka/cesta, pouze soubory -type f, končící na .doc -name "*.doc", -exec spustí pro ně: kopíruj cp nalezené soubory {}, kam /nejaka/cesta/vycuc/???.doc \;
grep /nejaka/cesta/vycuc b.u.d.d.h.a *.doc
grep vyhledej, /nejaka/cesta/vycuc kde, b.u.d.d.h.a co, *.doc v souborech s jakou koncovkou
Místo ??? potřebuji dosadit nějakou proměnou, podle které se budou soubory přejmenovávat, zkoušel jsem čas, ale sekundy jsou moc pomalé na rychlost kopírování, nějaké nápady, jak tam nějak vložit třeba proměnou n a pro další n+1? Jsem laik a nemám o tom páru, tak za každou konkrétní radu budu rád.
-exec
může následovat místo cp
přímo i ten tvůj grep
, čímž je problém vyřešen (dodatečným požadavkem na kopírování sis řešení zkomplikoval).
grep --include '*.doc' -r 'b.u.d.h.a' .
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.