Portál AbcLinuxu, 9. listopadu 2025 11:41
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
Řešení dotazu:
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.
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.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
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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.