Příkaz ls v Linuxu se používá pro výpis obsahu libovolného adresáře.
Ve výchozím nastavení uvádí veškerý obsah, ať už se jedná o soubor nebo adresář, odkaz nebo pojmenovanou rouru.
Ale co když chcete vypsat pouze adresáře? Jak to děláš?
Jako cokoli v Linuxu existuje několik způsobů, jak splnit stejný úkol. Výpis pouze adresářů se nijak neliší:
- ls -d */
- ls -l | grep '^d'
- najít . -maxdepth 1 -typ d
- echo */
- strom -d -L 1
neboj. Vysvětlím věci podrobně. Zde je obsah adresáře, který budu používat v příkladech zde:
Příkaz ls použijte pouze k vypsání adresářů
Vždy je dobré to udělat pomocí známého příkazu ls, protože to je příkaz, který používáte pro zobrazení obsahu adresáře.
Chcete-li vypsat pouze podadresáře, použijte -d
možnost s příkazem ls takto:
ls -d */
Zde je výstup, který se zobrazuje:
[[email protected] Documents]$ ls -d */
another_dir/ my_dir/
Proč */
? Protože bez něj ls -d
vrátí pouze název adresáře. -d
seznam voleb, nikoli jeho obsah (což zahrnuje soubor, adresáře atd.).
*/
je vzor. S *
, vypíšete veškerý obsah (včetně obsahu podadresářů) a /
omezuje vzor na adresáře.
Tento obrázek ukazuje rozdíl docela dobře.
Můžete jej zkombinovat s možností dlouhého výpisu -l
a většina dalších možností:
[[email protected] 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 si nepřejete koncové lomítko (/) na konci názvů adresářů, můžete je vyjmout pomocí příkazu cut:
[[email protected] Documents]$ ls -ld */ | cut -f1 -d'/'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Vypsat pouze podadresáře 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 k adresáři s ls -d
:
ls -d Path/To/Dir/*/
Zde je příklad, kdy se přesunu z adresáře Dokumenty a poté vypíšu pouze adresáře v adresáři Dokumenty:
[[email protected] ~]$ 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 neuvádí skrytý adresář? To je jeden nedostatek této metody. Můžete použít ls -d .*/
zobrazit skryté adresáře, ale zobrazí pouze skryté adresáře.
Použít 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čínají d
.
Pomocí grep můžete filtrovat obsah začínající na d:
ls -l | grep '^d'
Ale tím získáte mnohem více polí než jen názvy adresářů:
[[email protected] Documents]$ ls -l | grep '^d'
drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Použijte příkaz find k zobrazení pouze adresářů
Zde je návod, jak použít příkaz find k zobrazení pouze podadresářů:
find directory_path -maxdepth 1 -type d
Doufám, že jste obeznámeni s příkazem find. Přesto to vysvětlím.
Pomocí type d
, požádáte příkaz find, aby hledal pouze adresáře.
S maxdepth 1
požádáte příkaz find, aby ponechal hledání pouze na aktuální úrovni (a nešel do podadresářů).
[[email protected] Documents]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir
Jak můžete vidět ve výstupu výše, zobrazuje také skrytý adresář.
Použijte příkaz tree k zobrazení pouze adresářů
Pokud je vaším cílem vypsat pouze adresáře, můžete také použít příkaz tree.
Ve výchozím nastavení vám příkaz tree poskytuje úplnou strukturu adresářů. Můžete jej upravit tak, aby zobrazoval pouze adresáře a pouze na aktuální úrovni.
tree -dai -L 1
- d – hledat pouze adresáře
- a – vyhledejte také skryté soubory a adresáře
- i – odstranění stromové struktury ze zobrazení
- L 1 – nevstupujte do podadresářů
Zde je výstup:
[email protected] Documents]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir
3 directories
Použití příkazu echo pro výpis adresářů
Nepravděpodobný kandidát? Budete překvapeni, že příkaz echo v Linuxu lze použít také 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 pro zobrazení pouze adresářů v aktuálním pracovním adresáři.
echo */
Zde je výstup, který je identický s tím, co jste získali pomocí ls -d
příkaz:
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é „kdyby“ a „ale“ na základě toho, co hledáte.
Pokud je vaším cílem pouze zobrazit adresáře, většina příkazů, které jsem probíral, by fungovala. Pokud chcete něco konkrétnějšího, jako je pouze získání názvu adresáře pomocí lomítka atd., budete muset provést nějaké formátování sami.
Doufám, že vám tento tip pro Linux pomůže. Otázky a návrhy jsou vždy vítány.