GNU/Linux >> Znalost Linux >  >> Linux

Počítání počtu souborů v adresáři v Linuxu

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.


Linux
  1. Jak zvýšit limit počtu otevřených souborů v Linuxu

  2. Jak spočítat počet souborů a podadresářů v daném adresáři

  3. Jak spočítat počet souborů v každém adresáři?

  1. Spočítejte řádky všech souborů v adresáři Ubuntu

  2. Maximální počet souborů/adresářů na Linuxu?

  3. Rekurzivní počítání souborů v adresáři Linuxu

  1. Jaký je nejlepší způsob, jak spočítat počet souborů v adresáři?

  2. linux tree příkaz limit počtu souborů zobrazených v každém adresáři

  3. Rychlý způsob rekurzivního počítání souborů v linuxu