GNU/Linux >> Znalost Linux >  >> Linux

Bash skript pro odstranění souborů starších než x dní s podadresáři

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 rm pouze. Budete potřebovat rm -r za 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.


Linux
  1. Jak smazat všechny soubory starší než X počet dní v Linuxu?

  2. Jak vytvořit Cron Job, která automaticky odstraní soubory, které jsou starší než 30 dní?

  3. Jak odstranit soubory, které jsou starší než n dní BEZ použití příkazu find

  1. Jak najít a odstranit soubory starší než určité časové období v Linuxu

  2. najít a odstranit soubor nebo složku starší než x dní

  3. Jak v Linuxu odstraníte soubory starší než konkrétní datum?

  1. Najděte všechny soubory starší než jedna minuta

  2. Najít adresáře se všemi soubory staršími než X?

  3. Hledání souborů starších než x dní v systému s odříznutým busyboxem