GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu rekurzivně vypsat seznam všech adresářů na místě, nejprve na šířku?

Pokud to chcete udělat pomocí standardních nástrojů, měl by fungovat následující kanál:

find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2

To znamená,

  1. najděte a vytiskněte zde všechny adresáře v první řadě podrobně
  2. spočítejte počet lomítek v každém adresáři a přidejte je před cestu
  3. řazení podle hloubky (tj. počtu lomítek)
  4. extrahujte pouze cestu.

Pro omezení nalezené hloubky přidejte do příkazu find argument -maxdepth.

Pokud chcete, aby adresáře byly uvedeny ve stejném pořadí, ve kterém je najdou výstup, použijte "sort -n -s" místo "sort -n"; příznak "-s" stabilizuje řazení (tj. zachovává pořadí vstupů mezi položkami, které se porovnávají stejně).


find příkaz podporuje -printf možnost, která rozpoznává mnoho zástupných symbolů.

Jedním takovým zástupným symbolem je %d který vykresluje hloubku dané cesty vzhledem k find začalo.

Proto můžete použít následující jednoduchý jednolinkový:

find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-

Je to docela jednoduché a nezávisí na těžkých nástrojích jako perl .

Jak to funguje:

  • interně generuje seznam souborů, z nichž každý je vykreslen jako čára se dvěma poli
  • první pole obsahuje hloubku, která se používá pro (zpětné) numerické třídění, a poté se odřízne
  • výsledkem je jednoduchý výpis souborů, jeden soubor na řádek, v nejhlubším pořadí

Linux
  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak vypsat nebo seřadit všechny soubory podle velikosti v Linuxu

  3. Najít největší soubory nebo adresáře?

  1. Jak vypsat všechny přihlášené uživatele

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

  3. Jak odstranit všechny adresáře .svn z adresářů mých aplikací

  1. Jak vypsat velikost adresáře všech podřízených adresářů?

  2. Jak najít největší adresáře nebo největší soubory?

  3. Jak mohu rekurzivně odstranit všechny prázdné soubory a adresáře v Linuxu?