Předpokládám, že znáte příkaz wc pro počítání počtu řádků. Můžeme použít stejný příkaz wc s příkazem ls k počítání počtu souborů v adresáři.
Tento úkol se zdá být jednoduchý, ale brzy se může stát mírně složitým na základě vaší potřeby a definice počítání souborů. Než vás budu dále zmást, podívejme se na různé případy použití počítání počtu souborů v Linuxu.
Počet počtu souborů v adresáři v Linuxu

Nejprve vám ukážu obsah testovacího adresáře, který budu používat v tomto tutoriálu:
[email protected]:~/tutorials$ ls -la
total 64
drwxr-xr-x 4 abhishek abhishek 4096 Apr 29 17:53 .
drwxr-xr-x 55 abhishek abhishek 4096 Apr 29 15:50 ..
-rwxr–r– 1 abhishek abhishek 456 Mar 6 16:21 agatha.txt
-rw-r–r– 1 abhishek abhishek 0 Apr 16 19:53 .a.t
-rwxr–r– 1 abhishek abhishek 140 Mar 22 16:41 bash_script.sh
-rw-rw-r– 1 abhishek abhishek 95 Feb 11 13:12 cpluplus.cpp
-rw-r–r– 1 abhishek abhishek 1778 Apr 29 16:16 my_zip_folder.zip
drwxr-xr-x 4 abhishek abhishek 4096 Apr 19 19:07 newdir
-rw-r–r– 1 abhishek abhishek 163 Apr 13 15:07 prog.py
-rw-r–r– 1 abhishek abhishek 19183 Mar 18 18:46 services
-rw-r–r– 1 abhishek abhishek 356 Dec 11 21:35 sherlock.txt
-rwxrw-r– 1 abhishek abhishek 72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 abhishek abhishek 4096 Jan 4 20:10 target
Můžete vidět, že má 9 souborů (včetně jednoho skrytého souboru) a 2 podadresáře v tomto adresáři. Ale nemusíte to dělat ručně. Spočítejme počet souborů pomocí příkazů Linuxu.
Počet počtu souborů a adresářů (bez skrytých souborů)
Můžete jednoduše spustit kombinaci příkazů ls a wc a zobrazí se počet souborů:
ls | wc -l
Toto je výstup:
[email protected]:~/tutorials$ ls | wc -l
10
S tímto příkazem je problém. Počítá všechny soubory a adresáře v aktuálních adresářích. Nevidí však skryté soubory (soubory, které mají název začínající tečkou).
To je důvod, proč mi výše uvedený příkaz ukázal počet 10 souborů místo 11 (9 souborů a 2 adresáře).
Počet počtu souborů a adresářů včetně skrytých souborů
Pravděpodobně již víte, že volba -a příkazu ls zobrazuje skryté soubory. Ale pokud použijete příkaz ls -a, zobrazí se také . (současný adresář) a .. (nadřazený adresář). To je důvod, proč musíte použít volbu -A, která zobrazí skryté soubory kromě . a .. adresáře.
ls -A | wc -l
Tím získáte správný počet souborů a adresářů v aktuálním adresáři. Podívejte se na výstup, který ukazuje počet 11 (9 souborů a 2 adresáře):
[email protected]:~/tutorials$ ls -A | wc -l
11
K dosažení stejného výsledku můžete také použít tento příkaz:
ls -1A | wc -l
Všimněte si, že použitá možnost je 1 (jedna), nikoli l (L). Použitím možnosti l (L) se na začátku výstupu zobrazí další řádek (viz ‚celkem 64‘ ve výstupu adresáře na začátku článku). Použití 1 (jedna) vypíše jeden obsah na řádek s výjimkou dalšího řádku. To poskytuje přesnější výsledek.
Počet počtu souborů a adresářů včetně podadresářů
To, co jste zatím viděli, je počet souborů a adresářů pouze v aktuálním adresáři. Nebere v úvahu soubory v podadresářích.
Pokud chcete spočítat počet souborů a adresářů ve všech podadresářích, můžete použít příkaz tree.
tree -a
Tento příkaz zobrazí adresářovou strukturu a poté zobrazí souhrn v dolní části výstupu.
[email protected]:~/tutorials$ tree -a
.
├── agatha.txt
├── .a.t
├── bash_script.sh
├── cpluplus.cpp
├── my_zip_folder.zip
├── newdir
│ ├── new_dir
│ │ ├── c.xyz
│ │ ├── myzip1.zip
│ │ └── myzip2.zip
│ └── test_dir
│ ├── c.xyz
│ ├── myzip1.zip
│ └── myzip2.zip
├── prog.py
├── services
├── sherlock.txt
├── sleep.sh
└── target
├── agatha.txt
├── file1.txt
└── past
├── file1.txt
├── file2.txt
└── source1
└── source2
└── file1.txt
7 directories, 19 files
Jak můžete vidět na výstupu, ukazuje, že je celkem 7 adresářů a 20 souborů. Dobrá věc na tomto výsledku je, že do počtu souborů nezapočítává adresáře.
Počítají pouze soubory, nikoli adresáře
Dosud všechna řešení, která jsme viděli pro počítání počtu souborů, berou v úvahu také adresáře. Adresáře jsou v podstatě soubory, ale co když chcete počítat pouze počet souborů, nikoli adresářů? Můžete použít skvělý příkaz find.
Můžete spustit tento příkaz:
find . -type f | wc -l
Výše uvedený příkaz vyhledal všechny soubory (typ f) v aktuálním adresáři a jeho podadresářích.
[email protected]:~/tutorials$ find . -type f | wc -l
20
Počítají pouze soubory, nikoli adresáře a pouze v aktuálním adresáři, nikoli podadresáře
To je hustý! Ale co když chcete spočítat počet souborů v aktuálním adresáři pouze s výjimkou souborů v podadresářích? Můžete použít stejný příkaz jako výše, ale s malým rozdílem.
Jediné, co musíte udělat, je přidat ‚hloubku‘ svého nálezu. Pokud jej nastavíte na 1, nevstoupí do podadresářů.
find . -maxdepth 1 -type f | wc -l
Tady je výstup:
[email protected]:~/tutorials$ find . -maxdepth 1 -type f | wc -l
9
Nakonec…
V Linuxu můžete mít několik způsobů, jak dosáhnout stejného cíle. Jsem si docela jistý, že v Linuxu může být několik dalších metod, jak spočítat počet souborů. Pokud používáte nějaký jiný příkaz, proč se o něj nepodělit s námi?
Doufám, že vám tento návod pro Linux pomohl naučit se pár věcí. Zůstaňte v kontaktu a získejte další tipy pro Linux.