GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menggunakan Wc Dan Piping Untuk Menemukan Berapa Banyak File Dan Direktori Di Direktori Tertentu?

Bagaimana saya bisa menggunakan penghitung kata (wc ) dan pemipaan untuk menghitung berapa banyak file atau direktori di /usr/bin direktori?

Jawaban yang Diterima:

Salah satu pendekatan adalah dengan menggunakan ls untuk memberi kami daftar file, tetapi kami ingin daftar ini dijamin hanya menampilkan 1 file atau direktori per baris. -1 switch akan melakukan ini untuk kita.

$ ls -1
dir1
dir2
dir3
fileA
fileB
fileC

Contoh

Buat contoh data di atas dalam direktori kosong.

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

Periksa:

$ ls
dir1  dir2  dir3  fileA  fileB  fileC

Sekarang untuk menghitung Anda dapat menggunakan wc -l untuk menghitung jumlah baris, yang sesuai dengan file atau direktori di ls -1 keluaran.

$ ls -1 | wc -l
6

(Namun perhatikan bahwa itu tidak termasuk file tersembunyi)

Menghitung file atau direktori, hanya saja tidak bersamaan

Untuk menghitung file atau direktori, Anda perlu sedikit mengubah taktik Anda. Dalam hal ini saya akan menggunakan ls -l karena ini menunjukkan apa itu direktori dan apa itu file.

Contoh

$ 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

Kemudian kita dapat menggunakan grep untuk memfilter direktori atau bukan direktori seperti:

# 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

Sekarang cukup gunakan wc -l lagi untuk menghitung di atas:

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

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

Padahal, Anda dapat menghindari wc sama sekali, dan gunakan grep -c pilihan:

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

(sekali lagi, file tersembunyi tidak disertakan. Perhatikan bahwa direktori dan reguler adalah dua jenis file. Ada banyak lagi seperti pipa bernama, tautan simbolik, perangkat, soket…).

Rekursi

Jika Anda perlu menemukan file dan direktori secara rekursif di bawah /usr/bin maka Anda mungkin ingin mengubah taktik sepenuhnya dan menggunakan alat lain yang disebut find .

Contoh

$ find /usr/bin | wc -l
4632

(meskipun di atas /usr/bin sendiri termasuk dalam hitungan)

Teknik yang sama yang saya gunakan di atas dapat digunakan menggunakan ls untuk melakukan sesuatu yang serupa tetapi ls umumnya bukan alat yang baik untuk mengurai output. find di sisi lain dibuat untuk ini, dan menawarkan sakelar untuk menemukan file atau direktori.

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

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

(perhatikan bahwa kali ini, find termasuk file tersembunyi (kecuali . dan .. )).

Terkait:Temukan font terbaik untuk merender titik kode?

baris baru?

Saya tidak pernah tahu mengapa karakter baris baru adalah karakter legal untuk digunakan saat membuat nama file atau nama direktori. Jadi metode yang dibahas di atas menggunakan wc dan ls tidak akan menentang ini, jadi gunakanlah dengan mempertimbangkan hal itu.

Contoh

Buat direktori &nama file dengan baris baru.

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

ls menunjukkannya dengan benar:

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

Tapi wc menghitung direktori dan file yang berisi baris baru sebagai 2 item, bukan satu.

$ ls -1 | wc -l
10

Salah satu metode untuk menyiasatinya, jika menggunakan implementasi GNU dari find adalah menggunakan find kemampuan untuk mencetak sesuatu yang lain di tempat setiap file yang ditemukan dan kemudian menghitungnya sebagai gantinya.

Contoh

$ find . -printf . | wc -c
9

Di sini kami menemukan semuanya di direktori saat ini (kecuali .. ), dan mencetak titik (. ) untuk masing-masing, dan kemudian menghitung titik menggunakan wc kemampuan untuk menghitung byte alih-alih baris, wc -c .

Referensi

  • bash – Apa cara terbaik untuk menghitung hasil pencarian?

Linux
  1. Cara Menemukan File Di Linux Di Semua Direktori Secara Rekursif

  2. Cara Menemukan dan Menyalin Jenis File Tertentu Dari Satu Direktori Ke Direktori Lain Di Linux

  3. Bagaimana cara mencari direktori dan menemukan file yang cocok dengan regex?

  1. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

  2. Gunakan Temukan Untuk Menemukan Direktori Tertentu Dan Hapus Semua File Di dalamnya Kecuali Satu Direktori?

  3. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix

  1. Cara Menemukan dan Menghapus Direktori dan File Kosong di Linux

  2. Cara mendaftar semua file dan direktori secara rekursif

  3. Bagaimana cara menemukan semua file dan direktori yang dapat ditulis oleh pengguna tertentu?