फिलानेवालों के साथ पार्स न करें sed
! उत्पादन echo "$file"
विश्वसनीय नहीं हो सकता है।
का उपयोग करें rename
। 17.10 पर आपको इसे पहले इंस्टॉल करना होगा
sudo apt install rename
फिर:
rename -n -- 's/[^-A-Za-z0-9_ .]/_/g' *
टिप्पणियाँ
-n
वास्तव में फ़ाइलों का नाम बदलने के लिए परीक्षण के बाद हटा दें
--
किसी भी फ़ाइल के साथ शुरू होने की स्थिति में अंतिम विकल्प -
[^-A-Za-z0-9_ .]
-
जिन वर्णों को हम बदलना नहीं चाहते - पहले या अंतिम स्थान पर रखें ताकि यह एक सीमा को इंगित न कर सके (इसका इन पदों पर अक्षरशः व्यवहार किया जाता है)।
- रिक्त स्थान को कक्षा में शामिल किया जा सकता है
.
वस्तुतः व्यवहार किया जाता है (अन्य रेगेक्स संदर्भों में यह किसी भी चरित्र के लिए खड़ा है और बच निकलने की आवश्यकता है)।
यह भी इसमें काम करता है sed
:
$ echo 'trip: hill' | sed 's/[^-A-Za-z0-9 _.]/_/g'
trip_ hill
यदि मैं आपके संस्करण में अंत में एक स्थान जोड़ता हूं, तो मुझे एक त्रुटि मिलती है:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._- ]/_/g'
sed: -e expression #1, char 22: Invalid range end
लेकिन -
अंत में, यह काम करता है:
$ echo 'trip: hill' | sed -e 's/[^A-Za-z0-9._ -]/_/g'
trip_ hill
तो शायद हाइपेन की स्थिति आपकी समस्या का कारण बनी जब आपने अंतरिक्ष को जोड़ा। लेकिन फ़ाइल नाम रखने के लिए सलाह नहीं!