příkaz ls v Linuxu se používá pro výpis obsahu libovolného adresáře.
ve výchozím nastavení obsahuje seznam veškerého obsahu, ať už jde o soubor nebo adresář nebo odkaz nebo pojmenované potrubí.
ale co když chcete uvést pouze adresáře? Jak to děláš?
stejně jako cokoli v Linuxu existuje několik způsobů, jak splnit stejný úkol. Výpis pouze adresářů se neliší:
- ls-d * /
- ls-l | grep ‚^d‘
- najít. – maxdepth 1-typ d
- echo * /
- strom-d-L 1
Neboj se. Vysvětlím vám to podrobně. Zde je obsah adresáře, který budu používat v příkladech zde:
použijte příkaz ls pro seznam adresářů pouze
vždy je dobré to udělat známým příkazem ls, protože toto je příkaz, který používáte pro zobrazení obsahu adresáře.
Chcete-li zobrazit pouze podadresáře, použijte volbu -d
s příkazem ls, jako je tento:
ls -d */
zde je výstup, který zobrazuje:
Documents]$ ls -d */another_dir/ my_dir/
proč */
? Protože bez něj ls -d
vrátí pouze název adresáře. Volba -d
seznam adresářů není jeho obsah (který zahrnuje soubor, adresáře atd.).
*/
je vzor. S *
vypíšete veškerý obsah (včetně obsahu podadresářů) a /
omezí vzor na adresáře.
tento obrázek znázorňuje rozdíl docela dobře.
můžete jej kombinovat s možností dlouhého výpisu -l
a většinou dalších možností:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
pokud nechcete koncové lomítko ( / ) na konci názvů adresářů, můžete jej vystřihnout příkazem cut:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
seznam pouze podadresářů v konkrétním adresáři
výše uvedený příkaz funguje v aktuálním adresáři. Co když nejste ve stejném adresáři?
v této situaci můžete použít */
na konci cesty adresáře s ls -d
:
ls -d Path/To/Dir/*/
zde je příklad, kdy se přesunu z adresáře dokumenty a poté uvedu pouze adresáře uvnitř adresáře dokumenty:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
všimli jste si, že neobsahuje seznam skrytých adresářů? To je jeden nedostatek této metody. Můžete použít ls -d .*/
k zobrazení skrytých adresářů, ale zobrazuje pouze skryté adresáře.
použijte kombinaci příkazu ls a grep
vždy se můžete spolehnout na starý dobrý příkaz grep pro filtrování výstupu pro konkrétní obsah.
pokud dlouhý seznam obsahu, můžete identifikovat adresáře, protože začít s d
.
pomocí grep můžete filtrovat obsah začínající na d:
ls -l | grep '^d'
ale to vám dává mnohem více polí než jen názvy adresářů:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
pomocí příkazu Najít můžete zobrazit pouze adresáře
zde je návod, jak pomocí příkazu Najít zobrazit pouze podadresáře:
find directory_path -maxdepth 1 -type d
doufám, že jste obeznámeni s příkazem najít. Přesto to vysvětlím.
s type d
požádáte příkaz Najít, aby hledal pouze adresáře.
pomocí maxdepth 1
požádáte příkaz find, aby udržel vyhledávání pouze na aktuální úrovni (a nešel do podadresářů).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
jak můžete vidět na výstupu výše, zobrazuje také skrytý adresář.
použijte stromový příkaz k vypsání pouze adresářů
pokud je vaším cílem vypsat pouze adresáře, můžete také použít stromový příkaz.
ve výchozím nastavení vám stromový příkaz poskytuje kompletní adresářovou strukturu. Můžete jej upravit tak, aby zobrazoval pouze adresáře a pouze na aktuální úrovni.
tree -dai -L 1
- d-hledejte pouze adresáře
- a – hledejte skryté soubory a adresáře také
- i-odstraňte stromovou strukturu z displeje
- L 1 – nechoďte do podadresářů
zde je výstup:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
pomocí příkazu echo pro výpis adresářů
nepravděpodobný kandidát? Budete překvapeni, když víte, že příkaz echo v Linuxu lze také použít pro zobrazení obsahu adresáře. Zkuste použít echo *
a přesvědčte se sami.
podobně jako u příkazu ls můžete také použít vzor */
k vypsání pouze adresářů v aktuálním pracovním adresáři.
echo */
zde je výstup, který je totožný s tím, co jste dostali příkazem ls -d
:
mohlo by existovat více způsobů, jak vypsat pouze adresáře, nikoli soubory. Ve skutečnosti zde diskutované metody mohou mít nějaké ifs a buts na základě toho, co hledáte.
pokud je vaším cílem pouze zobrazit adresáře, většina příkazů, o kterých jsem hovořil, by fungovala. Pokud chcete něco konkrétnějšího, jako je získání názvu adresářů s lomítkem atd., Budete muset udělat nějaké formátování sami.
doufám, že vám tento linuxový tip pomůže. Otázky a návrhy jsou vždy vítány.