Berharap saya bisa melakukan ini dengan find
perintah tetapi saya tidak dapat melihat tes dalam manual untuk melakukan apa yang saya inginkan. Saya ingin dapat menemukan direktori di direktori kerja yang berisi kurang dari, lebih dari atau persis jumlah yang saya tentukan.
find . -filecount +10 # any directory with more than 10 entries
find . -filecount 20 # any directory with exactly 20 entries
Namun sayang tidak ada opsi seperti itu.
Jawaban:
Anda dapat mencoba ini, untuk mendapatkan nama sub direktori dan jumlah file / direktori yang dikandungnya:
Jika Anda ingin melakukan hal yang sama untuk semua sub direktori (pencarian rekursif) gunakan ini sebagai gantinya:
Untuk memilih direktori yang memiliki tepat 10 file:
10 atau lebih:
10 atau kurang:
Jika Anda ingin menyimpan hanya nama direktori (misalnya Anda ingin mengirimnya ke proses hilir lainnya seperti yang disarankan @evilsoup) Anda dapat menggunakan ini:
sumber
find . -type d -exec bash -c 'echo -ne "{} "; ls "{}" | wc -l' \; | awk '$NF<=10'
Untuk daftar subdirektori langsung yang berisi file persis
$NUM
.Untuk daftar subdirektori langsung yang berisi lebih dari
$NUM
file.Untuk daftar subdirektori langsung yang berisi kurang dari
$NUM
file.Item dihentikan oleh karakter nol
\0
, sehingga nama file yang berisi baris baru atau jenis ruang putih lainnya akan ditafsirkan dengan benar. The%h
mencetak masing-masing filedirname
.awk
kemudian menggunakan array untuk menghitung berapa kali bertemu setiap direktori, mencetaknya jika kondisi terpenuhi.Harap dicatat bahwa tidak ada perintah yang disebutkan di atas yang akan menampilkan direktori yang berisi nol file. Juga perhatikan bahwa berdasarkan file saya mengacu pada 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-file di dalamnya, diperlukan perintah yang dimodifikasi. Ada terlalu banyak kemungkinan untuk mendaftar semuanya.
sumber
Coba ini:
Dalam contoh ini Anda dapat memeriksa apakah direktori CURRENT mengandung tepat 10, lebih dari 10 dan kurang dari 10 file / direktori. Jika Anda perlu memeriksa banyak direktori, cukup gunakan loop.
sumber
.
), Anda mungkin ingin memodifikasi sesuai.wc -l < <(printf %s\\n ./*)
atauprintf %s\\n ./* | wc -l
di dalam tes, untuk menghindarifind
panggilan yang tidak perlu . Ini juga akan menghindari masalah yang dicatat @terdon, termasuk.
dalam hasilnya. Namun, itu juga akan mengalami masalah mengabaikan file yang dimulai dengan.
; Saya akan menyelesaikan ini denganshopt -s dotglob
(untuk membuat gumpalan file pertandingan dimulai dengan.
, tetapi tidak.
atau..
).