GNU/Linux >> Znalost Linux >  >> Linux

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

Pravděpodobně je to možné provést bez vytváření souborů pomocí substituce procesů nebo něčeho podobného, ​​ale zde je rychlé a špinavé řešení:

find . -type f -mtime +30 -printf '%h\n' | sort | uniq > old.txt
find . -type f -mtime -30 -printf '%h\n' | sort | uniq > new.txt
grep -vf new.txt old.txt

První příkaz vypíše cestu každého souboru upraveného před více než 30 dny (v parametru find -printf -- alespoň s GNU find na mém systému -- %h vytiskne celou cestu kromě skutečného souboru), pak je seřadí a zbaví se všech duplikátů a celou věc vloží do souboru s názvem old.txt .

Druhý příkaz provede totéž, ale s každým souborem upraveným před méně než 30 dny a vloží je do jiného souboru, new.txt .

Řádek grep vytiskne každý řádek z old.txt, který se neobjeví v new.txt -- takže vám poskytne seznam adresářů, které obsahují pouze soubory, které byly naposledy upraveny před více než 30 dny.

To vše pomocí GNU verzí utilit. Nevím, zda se syntaxe shoduje s verzemi BSD atd.


Konečně jsem přišel na tu kouzelnou jednolinku:

for dir in `find . -type d -mtime +30`; do test `find $dir -type f -mtime -30 -print -quit` || echo $dir; done

Tím se vytisknou všechny adresáře, které mají dobu úpravy delší než 30 dní a za posledních 30 dní nebyly změněny žádné soubory.


Linux
  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Odebrat všechny soubory/adresáře kromě jednoho souboru?

  3. Jak najít všechny soubory větší než 1 GB v Linuxu?

  1. Jak najít všechny soubory/složky s oprávněním 777 v Linuxu?

  2. Rekurzivně vypisujte všechny soubory v adresáři včetně souborů v adresářích symbolických odkazů

  3. Jak najít všechny soubory končící na .rb s Linuxem?

  1. Najděte všechny soubory s názvem obsahujícím řetězec

  2. Vypsat všechny soubory grafických obrázků s find?

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