GNU/Linux >> Znalost Linux >  >> Linux

Jak vypsat pouze adresáře v Linuxu

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.


Linux
  1. Příkaz Linux:Jak „najít“ pouze textové soubory?

  2. Jak rekurzivně vypsat adresáře v C na Linuxu?

  3. Jak mohu uvést seznam všech zamčených uživatelů v Linuxu?

  1. Jak zobrazit seznam uživatelů v Linuxu, příkaz Seznam všech uživatelů

  2. Jak používat Su Command v Linuxu

  3. Linux ls Command - Seznam souborů

  1. Jak používat příkaz Disown v Linuxu

  2. Jak používat příkaz Linux SS

  3. Jak zkopírovat soubor do více adresářů v Linuxu