Di komputer saya ketika saya menggunakan:
find . \( -name dirname -type d \) -exec rm -r '{}' ';'
Direktori dihapus tetapi saya mendapatkan kesalahan:
find: ‘./dirname’: No such file or directory
untuk setiap direktori.
Direktori saya tidak kosong, jadi opsi -delete tidak akan berfungsi untuk saya. Saya menemukan alasan perilaku ini di sini :
- find mengambil (belum tentu) entri pertama dalam direktori ./. ini akan menjadi misalnya dir.1 /
- itu membandingkannya dengan pola 'dir.?'. apakah ini cocok? Iya.
- temukan eksekusi "rm -r dir.1".
- find mencoba memasukkan dir.1 / untuk menemukan pola di dalam direktori. tidak tahu apa-apa tentang perintah exec.
- tidak menemukan dir.1 / lagi. mengembalikan ENOENT (lihat output strace)
Saya menggunakan ini sebagai gantinya:
rm -r `find . -name dirname -type d`
Ingatlah bahwa find masih akan mencoba untuk kembali ke direktori bernama dirname, yang sebenarnya tidak perlu dan akan membutuhkan waktu tambahan. Bergantung pada struktur direktori Anda, Anda mungkin dapat mengatasinya dengan --depth
opsi find. Selain itu, jika Anda memiliki struktur direktori seperti dirname / foo / dirname Anda akan mendapatkan kesalahan "Tidak ada file atau direktori" dari rm. Untuk menekan kesalahan, Anda dapat mengarahkan stderr ke / dev / null atau menggunakan -f
flag (force) dengan rm.
-delete
opsi.