Portál AbcLinuxu, 7. května 2025 22:02

Dotaz: príkaz find -delete; find -exec - nefunguje

8.6.2010 22:05 tomolc | skóre: 29 | blog: Live Desktop Tuning | Bratislava
príkaz find -delete; find -exec - nefunguje
Přečteno: 1637×
Odpovědět | Admin

Zdravím

Do môjho skriptu chcem dať nasledovný príkaz:

find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 .... zmaž nájdené veci

Vo fórach som čítal že nieje optimálne výsledok posielať cez | do rm ale že sa má používať vstavaná funkcia - delete.

 

Tak som to skúsil ale nejak mi to nefunguje:

find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 -delete

find: cannot delete `/media/b_usb/zalohy/back_local/09-05_17-20-prir': Directory not empty

 

Tak ma napadlo že zavolám predsalen to rm:

find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 -exec rm -rf {}

find: chýbajúci parameter pre `-exec'

 

Neviem nájsť kde je chyba. Skúšal som v man či pre to -delete nieje nejaký parameter "force" alebot tak niečo ale nenašiel som.

Vie niekto ako nato?

Ďakujem

pocasienahorach.sk

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.6.2010 22:19 Ash | skóre: 53
Rozbalit Rozbalit vše Re: príkaz find -delete; find -exec - nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
man find, -exec, také sekce EXAMPLES tamtéž a vysvětlení escapování středníku.
find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 -exec rm -rf '{}' \;
find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 -exec rm -rf '{}' +
etc.
9.6.2010 07:02 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: príkaz find -delete; find -exec - nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +29 -delete

find: cannot delete `/media/b_usb/zalohy/back_local/09-05_17-20-prir': Directory not empty
 
Problém je v tom -maxdepth. Co chcete udělat? Smazat jen věci na 1. úrovni adresářů? Potom je tam ta hláška správně a pomocí rm -rf si to odbouchnete nesprávně všechno. Nebo chcete smazat všechno rekurzivně? Pak tam nedávejte -maxdepth.
In Ada the typical infinite loop would normally be terminated by detonation.
Fuky avatar 9.6.2010 09:46 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: príkaz find -delete; find -exec - nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin

Pokud se jedná o velké množství souborů, tak je výhodnější předat výstup programu xargs, který minimalizuje volání rm, tj. když použiješ volbu -exec příkazu find, tak se pro každou položku zavolá jedna instace příkazu rm, ovšem pokud předáš výstup příkazu xargs (viz níže), tak se jedna instace rm zavolá pro počet položek, které se vejdou do ARG_MAX.

find ./back_local -maxdepth 1 -type d -mtime +29 |xargs rm -rf
-- RÁMO: psí tábor , ETriatlon: Výuka plavání
9.6.2010 10:51 deadmail
Rozbalit Rozbalit vše Re: príkaz find -delete; find -exec - nefunguje
este lepsie, aby fungovalo aj pre subory s medzerou v nazve:
find ... -print0 | xargs -0 rm -rf
9.6.2010 17:12 tomolc | skóre: 29 | blog: Live Desktop Tuning | Bratislava
Rozbalit Rozbalit vše Re: príkaz find -delete; find -exec - nefunguje
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ďakujem, už to funguje tak ako som chcel:

find /media/b_usb/zalohy/back_local -maxdepth 1 -type d -mtime +20 -print0 | xargs -0 rm -rf

tomolc
pocasienahorach.sk

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.