GNU/Linux >> Znalost Linux >  >> Linux

Jak pomocí WC a potrubí zjistit, kolik souborů a adresářů je v určitém adresáři?

Jak mohu použít počítadlo slov (wc ) a pomocí potrubí spočítat, kolik souborů nebo adresářů je v /usr/bin adresář?

Přijatá odpověď:

Jedním přístupem by bylo použití ls nám poskytne seznam souborů, ale chceme, aby tento seznam zaručeně zobrazoval pouze 1 soubor nebo adresář na řádek. -1 přepínač to udělá za nás.

$ ls -1
dir1
dir2
dir3
fileA
fileB
fileC

Příklad

Vytvořte výše uvedená ukázková data v prázdném adresáři.

$ mkdir dir{1..3}
$ touch file{A..C}

Zkontrolujte to:

$ ls
dir1  dir2  dir3  fileA  fileB  fileC

Nyní k počítání můžete použít wc -l spočítat počet řádků, které odpovídají souboru nebo adresáři v ls -1 výstup.

$ ls -1 | wc -l
6

(Všimněte si však, že nezahrnuje skryté soubory)

Počítání souborů nebo adresářů, jen ne dohromady

Chcete-li počítat soubory nebo adresáře, musíte mírně změnit taktiku. V tomto případě bych použil ls -l protože ukazuje, co je adresář a co je soubor.

Příklad

$ ls -l
total 12
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir1
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir2
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir3
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileA
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileB
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileC

Pak můžeme použít grep pro odfiltrování adresářů nebo ne-adresářů, jako je tento:

# directories
$ ls -l | grep "^d"
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir1
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir2
drwxrwxr-x 2 saml saml 4096 Nov 16 09:48 dir3

# regular files
$ ls -l | grep "^-"
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileA
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileB
-rw-rw-r-- 1 saml saml    0 Nov 16 09:49 fileC

Nyní stačí použít wc -l znovu počítat výše uvedené:

# directories
$ ls -l | grep "^d" | wc -l
3

# regular files
$ ls -l | grep "^-" | wc -l
3

Můžete se však vyhnout wc dohromady a použijte grep ‘s -c možnost:

$ ls -l | grep -c '^d'

(opět nejsou zahrnuty skryté soubory. Všimněte si, že adresáře a regular jsou dva typy souborů. Existuje mnohem více, jako jsou pojmenované kanály, symbolické odkazy, zařízení, zásuvky…).

Rekurze

Pokud potřebujete najít soubory a adresáře rekurzivně pod /usr/bin pak budete pravděpodobně chtít úplně změnit taktiku a použít jiný nástroj nazvaný find .

Příklad

$ find /usr/bin | wc -l
4632

(ačkoli nad /usr/bin sám je zahrnut do počtu)

Stejné techniky, které jsem použil výše, lze použít pomocí ls udělat něco podobného, ​​ale ls obecně není dobrým nástrojem pro analýzu výstupu. find na druhou stranu byl pro toto vytvořen a nabízí přepínače pro vyhledání souborů nebo adresářů.

# find files
$ find /usr/bin -type f

# find directories
$ find /usr/bin -type d

(Všimněte si, že tentokrát find obsahuje skryté soubory (kromě . a .. )).

Související:Najít nejlepší písmo pro vykreslení kódového bodu?

nové řádky?

Nikdy jsem nepřišel na to, proč je znak nového řádku zákonným znakem, který lze použít při vytváření názvů souborů nebo adresářů. Takže metody popsané výše pomocí wc a ls by se s nimi nepotýkal, takže je používejte s ohledem na to.

Příklad

Vytvořte adresář a název souboru s novými řádky.

$ mkdir $'dir4n5'
$ touch $'fileDnE'

ls zobrazuje je správně:

$ ls -1
dir1
dir2
dir3
dir4?5
fileA
fileB
fileC
fileD?E

Ale wc počítá adresáře a soubory, které obsahují nové řádky, jako 2 položky, nikoli jako jednu.

$ ls -1 | wc -l
10

Jedna metoda, jak to obejít, pokud používáte GNU implementaci find je použít find schopnost vytisknout místo každého nalezeného souboru něco jiného a místo toho je spočítat.

Příklad

$ find . -printf . | wc -c
9

Zde najdeme vše v aktuálním adresáři (kromě .. ) a tisk tečky (. ) pro každý a poté počítání teček pomocí wc schopnost počítat bajty místo řádků, wc -c .

Odkazy

  • bash – Jaký je nejlepší způsob, jak počítat výsledky hledání?

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

  2. Jak najít a zkopírovat určitý typ souborů z jednoho adresáře do druhého v Linuxu

  3. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak prohledám adresáře a najdu soubory, které odpovídají regulárnímu výrazu?

  3. Jak najdu všechny soubory a adresáře, do kterých lze zapisovat konkrétním uživatelem?

  1. Jak najít a odstranit prázdné adresáře a soubory v Unixu

  2. Jak najít a odstranit prázdné adresáře a soubory v Linuxu

  3. Jak rekurzivně vypsat všechny soubory a adresáře