Saya membaca di sini bahwa Anda dapat menghitung jumlah doa command
masuk -exec command {} +
dengan menyalurkannya | wc -l
ke akhir.
Walaupun saya mengerti bahwa -execdir
ini berbeda, dalam hal itu, untuk setiap sub-direktori yang cocok yang find
ditemukan, ia menjalankan permintaan dari command
sub-direktori yang terkandung di dalamnya, jika saya memiliki lebih dari satu file yang cocok dengan sub-direktori, seharusnya tidak Apakah saya dapat menemukan jumlah invokasi yang sama dengan jumlah sub-direktori yang cocok, dan bukan jumlah invokasi yang cocok dengan jumlah file yang cocok pada sub-direktori tersebut?
Saya berakhir dengan yang terakhir ketika saya menjalankan yang berikut:
$ find . -name "bob*" -execdir echo {} + | wc -l
Halaman manual untuk execdir command {} +
menyatakan bahwa yang pertama harus menjadi kasus:
Seperti
-exec
tindakan,+
bentuk perintah-execdir
akan membangun baris perintah untuk memproses lebih dari satu file yang cocok, tetapi setiap permintaan yang diberikancommand
hanya akan mencantumkan file yang ada di sub-direktori yang sama.
yaitu
Saya mendapatkan:
./file1inDir1
./file2inDir1
./file3InDir2
./file4InDir3
Ketika saya mengharapkan ini, berdasarkan halaman manual:
./file1inDir1 ./file2inDir1
./file3InDir2
./file4InDir3
echo
dan argumen yang dihasilkan oleh{} +
dan Anda tidak memiliki baris baru di nama file Anda (kebanyakan orang tidak) MAKA jumlah baris adalah jumlah doa dan itu berfungsi. Jika perintah dikatakanhead -n 999000 /dev/urandom
itu salah besar.Jawaban:
Ini adalah masalah kinerja
find
. Dalamfindutils
versi 4.3.4, solusi harus membatasi jumlah argumen yang-execdir ... {} +
akan digunakan ke 1. Dalam versi 4.5.9 batas telah dihapus.Lihat sebuah contoh:
Dengan
-execdir {} +
, perintah harus dijalankan 3 kali. Doa kedua harus memiliki 3 argumen.Dengan
find
4.4.2:Dengan
find
4.6.0:sumber