Saya mencoba mengubah nama file seperti ini:
for file in *;
do
mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')";
done
Tetapi sed
perintah mengganti semua spasi dengan _
.
Bagaimana saya bisa mengedit sed
perintah untuk membuatnya termasuk ruang bersama dengan karakter yang ditentukan? Saya sudah mencoba menggunakan \s
tetapi tidak berhasil ...
EDIT:
Misalnya: file trip: hill
, harus diganti nama:, trip_ hill
tetapi perintah di atas membuatnya trip__hill
.
command-line
bash
sed
batch-rename
Zanna
sumber
sumber
Jawaban:
Jangan parsing nama file dengan
sed
! Output dariecho "$file"
mungkin tidak dapat diandalkan.Gunakan
rename
. Pada 17.10 Anda harus menginstalnya terlebih dahuluKemudian:
Catatan
-n
setelah pengujian untuk benar-benar mengganti nama file--
end-of-options jika file dimulai dengan-
[^-A-Za-z0-9_ .]
karakter yang tidak ingin kami ganti - taruh-
dulu atau terakhir sehingga tidak dapat menunjukkan rentang (itu diperlakukan secara harfiah di posisi ini)..
diperlakukan secara harfiah (dalam konteks regex lain itu adalah singkatan dari karakter apa pun dan perlu melarikan diri).Ini juga berfungsi di
sed
:Jika saya menambahkan spasi di bagian akhir versi Anda, saya mendapatkan kesalahan:
Tetapi dengan
-
pada akhirnya, itu bekerja:Jadi mungkin posisi tanda hubung menyebabkan masalah Anda ketika Anda menambahkan spasi. Tetapi saran untuk tidak mengurai nama file tetap berlaku!
sumber
.
literal di kelas karakter. TIL!Anda juga dapat menggunakan shell, ekspansi parameter Bash dapat melakukan substitusi:
Double slash memberitahukannya untuk mengganti semua kecocokan, selain itu, sintaksinya mudah.
sumber