Saya ingin menghapus semua file di pohon direktori saat ini, kecuali yang ada di save
. Saya menjalankan perintah ini:
find . \( -name save -prune \) -o -type f -ls | grep /save/
dan tidak menemukannya. Tetapi ketika saya menjalankan perintah ini:
find . \( -name save -prune \) -o -type f -delete
Semua file di / save / sudah tidak ada. Apa yang saya lewatkan?
mv save/ ../some/safer/location
sebelum perintah penghapusan "generik" (... tapi tentu saja, sebelum posting Anda, saya akan melakukan pemeriksaan yang sama dan mengalami masalah yang sama!). Sekarang, cari "undelete" yang bagus untuk sistem file tempat file ^^Jawaban:
-delete
menyiratkan-depth
bahwa tidak bekerja dengan-prune
(-depth
dimulai dengan daun). Ada peringatan tentang hal itu di manual versi GNU (-delete
adalah ekstensi FreeBSD sekarang juga didukung oleh GNUfind
dan beberapa implementasi lainnya).Di sini, Anda memiliki pilihan untuk menggunakan
rm
:(berpotensi tidak aman jika ada direktori yang dapat ditulisi oleh orang lain di sana, karena orang dapat membuat Anda menghapus file di luar pohon direktori saat ini dengan mengganti direktori dengan symlink saat Anda menjalankan perintah itu).
Alternatif yang lebih aman:
Itu tidak memiliki masalah yang disebutkan di atas tetapi berarti menjalankan satu
rm
per file. The--
diperlukan untuk pelaksanaan FreeBSD, bukan GNU yang awalan nama file dengan./
.Atau, seperti yang disarankan oleh Costas:
(tapi itu masih sia-sia masuk ke
save
direktori)Apakah
LC_ALL=C
ada sehingga*
cocok dengan urutan byte (bahkan yang tidak membentuk karakter yang valid di lokal saat ini). Perhatikan bahwa ini akan memengaruhi bahasa pesan kesalahan (Bahasa Inggris alih-alih bahasa pengguna).sumber
rm
?