Portál AbcLinuxu, 7. května 2025 22:02
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.