GNU/Linux >> Belajar Linux >  >> Linux

Temukan direktori yang berisi sejumlah file

Anda dapat mencoba ini, untuk mendapatkan nama sub direktori dan jumlah file/direktori yang dikandungnya:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Jika Anda ingin melakukan hal yang sama untuk semua sub direktori (recursive find), gunakan ini sebagai gantinya:

find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Untuk memilih direktori yang memiliki tepat 10 file:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
  awk '$NF==10'

10 atau lebih:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF>=10'

10 atau kurang:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF<=10'

Jika Anda hanya ingin menyimpan nama direktori (misalnya Anda ingin menyalurkannya ke proses lain di hilir seperti yang disarankan @evilsoup), Anda dapat menggunakan ini:

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; | 
 awk -F"\t" '$NF<=10{print $1}'

Untuk membuat daftar subdirektori langsung yang berisi persis $NUM file.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]==num) printf "%s\n", line}'

Untuk membuat daftar subdirektori langsung yang berisi lebih besar dari $NUM file.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]>num) printf "%s\n", line}'

Untuk membuat daftar subdirektori langsung yang berisi kurang dari $NUM file.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]<num) printf "%s\n", line}'

Item diakhiri dengan karakter null \0 , sehingga nama file yang berisi baris baru atau jenis spasi lainnya akan ditafsirkan dengan benar. %h mencetak dirname setiap file . awk lalu menggunakan larik untuk menghitung berapa kali ia menemukan setiap direktori, mencetaknya jika kondisinya terpenuhi.

Harap perhatikan bahwa tidak satu pun dari perintah tersebut di atas akan menampilkan direktori yang berisi nol file. Perhatikan juga bahwa menurut file saya merujuk ke file biasa, bukan tautan, direktori, soket, blok, pipa bernama, dan sebagainya.

Saya sudah mencoba melakukan ini sesederhana mungkin. Jika Anda ingin menemukan subdirektori rekursif atau file di dalamnya, diperlukan perintah yang dimodifikasi. Ada terlalu banyak kemungkinan untuk mencantumkan semuanya.


Coba ini:

[`menemukan. | wc -l` -eq 10 ] &&gema "Ditemukan"

[`menemukan. | wc -l` -gt 10 ] &&gema "Ditemukan"

[`menemukan. | wc -l` -lt 10 ] &&gema "Ditemukan"

Dalam contoh ini Anda dapat memeriksa apakah direktori CURRENT berisi persis 10, lebih dari 10 dan kurang dari 10 file/direktori. Jika Anda perlu memeriksa banyak direktori, cukup gunakan loop.


Linux
  1. Cara Menemukan Jumlah File dalam Direktori dan Subdirektori

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

  3. Temukan File atau Direktori Terbesar?

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

  2. Jumlah maksimum file/direktori di Linux?

  3. Temukan semua file dengan nama yang mengandung string

  1. Temukan file dan direktori terbesar di Linux

  2. Jumlah File yang Mengandung String yang Diberikan?

  3. Bagaimana cara menghitung jumlah file di setiap direktori?