Saya mencoba menulis perintah bash yang akan menghapus semua file yang cocok dengan pola tertentu - dalam hal ini, itu semua file log vmware lama yang telah dibangun.
Saya sudah mencoba perintah ini:
find . -name vmware-*.log | xargs rm
Namun, ketika saya menjalankan perintah, itu tersedak pada semua folder yang memiliki spasi dalam namanya. Apakah ada cara untuk memformat path file sehingga xargs meneruskannya ke rm yang dikutip atau lolos dengan benar?
Jawaban:
Saya biasanya menemukan bahwa menggunakan
-exec
opsi untukfind
menjadi lebih mudah dan tidak membingungkan. Coba ini:Semuanya setelah
-exec
diambil menjadi perintah untuk menjalankan untuk setiap hasil, hingga;
, yang lolos di sini sehingga akan diteruskan kefind
. The{}
diganti dengan nama file yangfind
biasanya akan mencetak.Setelah Anda memverifikasi itu melakukan apa yang Anda inginkan, Anda dapat menghapus
-i
.sumber
Jika Anda memiliki GNU,
find
Anda dapat menggunakan-delete
opsi:Untuk menggunakan
xargs
dan menghindari masalah dengan spasi dalam nama file:Namun, file log Anda seharusnya tidak memiliki spasi dalam namanya. Dokumen pengolah kata dan file MP3 mungkin memilikinya, tetapi Anda harus dapat mengontrol nama file log Anda.
sumber
Anda dapat memberitahu
find
untuk membatasi daftar output dengan NULLs, danxargs
untuk menerima daftar inputnya sama:Selain itu, pastikan Anda lolos dari
*
, baik dengan backslash, atau dengan memuatvmware-*.log
tanda kutip tunggal, jika tidak, shell Anda dapat mencoba memperluasnya sebelum meneruskannyafind
.sumber
Jangan lupa opsi temukan
-delete
. Ini menghapus file tanpa kesalahan dengan karakter khusus ...sumber