type možnost filtrování výsledků
find přijímá type možnost výběru například pouze souborů.
find /path/to/files -type f -mtime +10 -delete
Vynechejte -delete ukázat, co by smazal, a jakmile to ověříte, pokračujte a spusťte celý příkaz.
To by běželo pouze na souborech, ne na adresářích. Použijte -type d naopak, vypisujte pouze adresáře, které odpovídají vašim argumentům.
Další možnosti
Možná si budete chtít přečíst man find , protože existují další možnosti, které byste mohli v budoucnu potřebovat. Například -maxdepth by vám umožnilo pouze omezit nalezené předměty do určité hloubky, např. -maxdepth 0 by se nevracel do podadresářů.
Několik poznámek
-
Zajímalo by mě, jak by příkaz odstranil složku, protože nemůžete odstranit složku s
rmpouze. Budete potřebovatrm -rza to. -
Také
/path/to/files*je matoucí. Měli jste na mysli/path/to/files/nebo očekáváte, že se zástupný znak rozšíří na několik názvů souborů a složek? -
Vložte
{}v jednoduchých uvozovkách, tj.'{}'abychom zabránili tomu, že nahrazený název souboru/adresáře bude interpretován shellem, stejně jako středník chráníme zpětným lomítkem.
Stejně jako v předchozích odpovědích (+1 pro obě) trik spočívá v použití -type f predikát.
Všimněte si, že místo -exec rm '{}' můžete také použít -delete predikát. Ale nedělej to. S -exec rm '{}' můžete (a měli byste) nejprve udělat -exec echo rm '{}' abyste si ověřili, že je to opravdu to, co chcete. Poté znovu spusťte příkaz bez echo .
Pomocí -delete je rychlejší (žádné další fork() a execve() pro každý soubor), ale je to riskantní, protože -delete funguje také jako podmínka, takže:
# delete *.tmp files
find . -type f -name '*.tmp' -delete
ale pokud POUZE zaměníte argumenty:
# delete ALL files
find . -type f -name '*.tmp' -delete
Pokud budete někdy potřebovat find a rm Chcete-li pracovat rychleji se spoustou souborů, podívejte se na find ... | xargs ... rm UNIXový idiom.