Dosya adlarını ayrıştırmayın sed! Çıkışı echo "$file"güvenilir olmayabilir.
Kullanın rename. 17.10'da önce yüklemeniz gerekir
sudo apt install rename
Sonra:
rename -n -- 's/[^-A-Za-z0-9_ .]/_/g' *
notlar
-ndosyaları gerçekten yeniden adlandırmak için test ettikten sonra kaldır
-- herhangi bir dosyanın başlaması durumunda seçenek sonu -
[^-A-Za-z0-9_ .]Değiştirmek istemediğimiz karakterler - -önce veya son olarak koymak , bir aralığı gösterememesi için (bu konumlarda tam anlamıyla ele alınır).
- Alanlar sınıfa dahil edilebilir
. kelimenin tam anlamıyla ele alınır (diğer regex bağlamlarında herhangi bir karakter anlamına gelir ve kaçması gerekir).
Bu ayrıca şu şekilde çalışır sed:
$ echo 'trip: hill' | sed 's/[^-A-Za-z0-9 _.]/_/g'
trip_ hill
Sürümünüzün sonuna bir boşluk eklersem bir hata alıyorum:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._- ]/_/g'
sed: -e expression #1, char 22: Invalid range end
Ama -sonunda, işe yarıyor:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._ -]/_/g'
trip_ hill
Belki de alanı eklediğinizde kısa çizginin konumu sorununuza neden oldu. Ancak dosya adlarını ayrıştırmama tavsiyesi duruyor!