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
-n
dosyaları 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!