Jangan parsing nama file dengan sed
! Output dari echo "$file"
mungkin tidak dapat diandalkan.
Gunakan rename
. Pada 17.10 Anda harus menginstalnya terlebih dahulu
sudo apt install rename
Kemudian:
rename -n -- 's/[^-A-Za-z0-9_ .]/_/g' *
Catatan
- hapus
-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).
- Spasi dapat dimasukkan dalam kelas
.
diperlakukan secara harfiah (dalam konteks regex lain itu adalah singkatan dari karakter apa pun dan perlu melarikan diri).
Ini juga berfungsi di sed
:
$ echo 'trip: hill' | sed 's/[^-A-Za-z0-9 _.]/_/g'
trip_ hill
Jika saya menambahkan spasi di bagian akhir versi Anda, saya mendapatkan kesalahan:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._- ]/_/g'
sed: -e expression #1, char 22: Invalid range end
Tetapi dengan -
pada akhirnya, itu bekerja:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._ -]/_/g'
trip_ hill
Jadi mungkin posisi tanda hubung menyebabkan masalah Anda ketika Anda menambahkan spasi. Tetapi saran untuk tidak mengurai nama file tetap berlaku!