जवाबों:
मैं निम्नलिखित का उपयोग करेगा:
#! /bin/bash
cd DirectoryName
for file in *.csv; do
filename=${file%.*}
file_clean=`echo $filename | tr -cs "[:alnum:]_" _ `
final="$file_clean.csv"
echo "mv \"$file\" \"$final\" "
done
cd ..
केवल परिवर्तन हैं:
1) पंक्ति में = के बाद एक स्थान था final= "$file_clean.csv"
। मैंने इसे हटा दिया है।
2) स्ट्रिंग प्रतिस्थापन कमांड का उपयोग करने के बजाय मैंने कमांड का उपयोग किया है tr
। Tr के साथ, -c
विकल्प किसी भी वर्ण को बदलने के लिए कहता है जो सेट में नहीं है। इसलिए मैं उन पात्रों को निर्दिष्ट कर सकता हूं जिन्हें मैं (अल्फ़ान्यूमेरिक्स और अंडरस्कोर, इस मामले में) रखना चाहता हूं और अन्य सभी को रूपांतरित किया जाएगा।
यह कुछ और विशेष पात्रों से मेल खाना चाहिए जो प्रत्यक्ष प्रतिस्थापन के माध्यम से निर्दिष्ट करना मुश्किल है, जैसे []\{}
और "
। -s
विकल्प का मतलब केवल एक अंडरस्कोर कई पात्रों को दबा भले ही उत्पन्न हो जाएगा कि। इस प्रकार के बजाय abc((((())))).csv
में अनुवाद करता abc_.csv
हैabc__________.csv
2)
बाहरी निष्पादन का उपयोग किए बिनाtr
:file_clean=${filename//[^[:alnum:]]/_}
। आप इस तरह से कई पात्रों के रन दबा सकते हैं:shopt -s extglob; file_clean=${filename//+([^[:alnum:]])/_}