Portál AbcLinuxu, 4. května 2025 17:27

Dotaz: Smazani vsech souboru *.txt v adresarich

25.1.2008 16:10 Michal
Smazani vsech souboru *.txt v adresarich
Přečteno: 554×
Odpovědět | Admin
Ahoj, jsem zacetecnik a potreboval bych poradit jak se daji nejakym elegantnim resenim smazat vsechny soubory slock.txt ve vsech adresarich a podadresarich, ktere jsou v /home Dekuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.1.2008 16:13 chytracek
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Odpovědět | | Sbalit | Link | Blokovat | Admin
find /home -name slock.txt -type f -print0 | xargs -0 /bin/rm -f
wolf09 avatar 25.1.2008 16:13 wolf09 | skóre: 30
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Odpovědět | | Sbalit | Link | Blokovat | Admin
find /home -name "slock.txt" -exec rm {} \;
Zkusili jste to vypnout a znovu zapnout ?
25.1.2008 16:17 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
-exec při větším množství souborů není nejlepším řešením. Zbytečně se tím prodlužuje vykonávání příkazu.
25.1.2008 16:20 ams
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Souhlas, pokud ovsem to neni -exec \+ :)
wolf09 avatar 25.1.2008 16:21 wolf09 | skóre: 30
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Podle me to vyjde na stejno, jestli se soubory nejdriv najdou a pak smazou jak v pripade find + xargs, nebo pokud se mazou primo pri hledani findem.
Zkusili jste to vypnout a znovu zapnout ?
25.1.2008 16:27 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Pro každý nalezený soubor se celý příkaz spouští od začátku, což bude určitě pomalejší než jednorázové vykonání. Myslím, že je to i zmíněno v manuálu find.
25.1.2008 18:39 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Je tam jistá (značná) režie spouštění příkazu rm (v případě varianty find ... -exec), kdy se rm spouští pro každý soubor znovu. V případě varianty s xargs smaže rm více nalezených souborů najednou.

Ten první případ s -exec je tedy něco jako find... | xargs -n1 ...
25.1.2008 18:47 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich

Záleží na tom, jestli se použije

  find ... -exec ... \;

nebo

  find ... -exec ... +

nebo dokonce

  find ... -delete

Ale ne všechy implementace to podporují.

25.1.2008 22:36 Petr Dlouhý
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Ale když těch je těch souborů moc, tak to bez -execu nepůjde, ne?
frEon avatar 25.1.2008 22:52 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
nezkousel sem, ale prepodkadam, ze to vypise neco jako argument list too long...
Talking about music is like dancing to architecture.
25.1.2008 23:34 Petr Dlouhý
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Přesně:

$ cat `find`

bash: /bin/cat: Argument list too long

Zvláštní je, že pro echo to funguje.
26.1.2008 01:50 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
V bashi je echo interní příkaz shellu.
26.1.2008 05:32 Petr Dlouhý
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Nojo, vážně, to jsem nevěděl.

$ echo `find`

---výpis---

$ /bin/echo `find`

bash: /bin/echo: Argument list too long

V tom případě ale pořád nechápu proč by interní příkaz shellu měl mít neomezeně dlouhé argumenty.
26.1.2008 12:59 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Spíš si položte otázku, proč by neměl. Je totiž čistě věcí shellu, jakým způsobem mu je předá. U externího příkazu musí využívat mechanismů operačního systému. Navíc IIRC někdy od jádra 2.6.23 nebo 2.6.24 by měl padnout i limit pro execve(), takže pak problém nevznikne ani u externího příkazu.
David Watzke avatar 25.1.2008 23:26 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Půjde, xargs řeší problém "argument list too long" tak, že ten příkaz v případě potřeby spustí víckrát...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.1.2008 23:32 Petr Dlouhý
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
$ find | xargs -0 /bin/cat xargs: řádek s argumenty je příliš dlouhý

Možná je na to potřeba nějaký argument, nehledal jsem to.
David Watzke avatar 26.1.2008 11:55 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Smazani vsech souboru *.txt v adresarich
Ano, řádek je příliš dlouhý, ne seznam argumentů. A to proto, že se pokoušíte o nesmysl. find vypisuje cesty oddělené \n a vy předáváte xargs přepínač -0, takže hledá oddělovač \0. Takhle je to správně:
find -print0 | xargs -0 /bin/cat
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.