Saya menemukan beberapa contoh yang berfungsi selama tidak ada spasi di nama file. Sayangnya, saya memiliki spasi di nama file saya (bukan pilihan saya, sebenarnya mereka yang harus saya hapus).
Jadi, misalnya, inilah yang menurut saya akan berhasil:
temukan. -type f | grep) .MOV | xargs rm
karena saya ingin menghapus file-file seperti:
- L112 (1) .MOV
- L113 (1) .MOV
- L113 (2) .MOV
- dll.
dan saya ingin menyimpan file seperti
- L112.MOV
- L113.MOV
- L114.MOV
- dll.
Ini menemukan file dengan benar:
temukan. -type f | grep) .MOV
tetapi ketika saya pipa ke rm, spasi di nama file mengacaukannya.
Bantuan apa pun akan sangat dihargai.
Katakan
xargs
untuk menggunakan baris baru sebagai pembatas:Lebih baik,
find
lakukan pencocokan dan penggunaan-print0
danxargs -0
untuk memungkinkan karakter apa pun dalam nama file, bahkan\n
!Bahkan lebih baik,
find
telepon sajarm
secara langsung.Terbaik, lewati
rm
danfind
lakukan penghapusan.Atau dalam kasus khusus ini, siapa yang butuh semua alat berat?
sumber
Coba ini:
sumber
Banyak alat unix yang rapuh (atau setidaknya sulit untuk digunakan dengan benar) di hadapan nama file yang mengandung spasi dan tab, atau bahkan lebih buruk, baris baru, jadi ketika Anda punya pilihan, Anda harus menghindari karakter ini dalam nama file.
Namun, jika Anda ingin menghapus semua file di direktori saat ini (dan semua subdirektori) dengan spasi di namanya, berikut ini akan berfungsi.
The
-print0
pilihan memberitahu menemukan menggunakan NUL byte (\ 0) sebagai pemisah antara nama file bukan NL (\ n). Sebaliknya,-0
memberi tahu xargs untuk menggunakan NUL sebagai pemisah baris, bukan NL. Ubah argumen pola ke-name
opsi yang diperlukan untuk mencocokkan file yang ingin Anda hapus.Ini mungkin agak sulit untuk mencegah
find
berulang ke subdirektori (walaupun periksa-maxdepth
argumennya), jadi jika Anda hanya ingin memengaruhi file dalam direktori saat ini, Anda mungkin ingin mendekati masalahnya secara berbeda.Secara keseluruhan, saya sangat merekomendasikan fasih dengan
find
danxargs
. Secara individual, dan terutama ketika dirantai bersama seperti yang ditunjukkan di atas, mereka membuat toolkit yang sangat fleksibel untuk operasi file massal.sumber
Di sebagian besar instalasi Unix Anda dapat menunjukkan ruang dalam nama file dengan awalan dengan backslash. Jadi misalnya, coba ini:
Lakukan "ls" dan Anda akan melihat ini:
file 3 file 4 file1 file2
Sekarang lakukan "ls * \ *" dan Anda akan melihat semuanya dengan spasi di dalamnya:
file 3 file 4
Jadi mungkin hanya "rm * \ *" yang Anda butuhkan? Atau modifikasi ekspresi reguler itu sedikit agar sesuai dengan kebutuhan Anda.
Semoga itu bisa membantu!
sumber