जवाबों:
जैसा कि दूसरों ने उल्लेख किया है, rename
यह अच्छा है, लेकिन man rename
इससे पहले कि आप इसे आज़माएं , मैन पेज ( ) पढ़ें । वहाँ कम से कम दो पूरी तरह से अलग उपकरण कहा जाता है rename
और जो आपके पास है वह आपके वितरण पर निर्भर करेगा। उन्हें गलत तरीके से बुलाना खतरनाक हो सकता है।
यहाँ लैरी वॉल द्वारा पर्ल-आधारित संस्करण के लिए मैन पेज है जो उबंटू के साथ जहाज करता है। आप इसे एक शानदार अभिव्यक्ति की तरह देते हैंrename 's/\.sql$/.php/' *.sql
यहाँ पुराने पेज को पुराने Red Hat और CentOS डिस्ट्रीब्यूशन वाले जहाजों के नाम के लिए रखा गया है। उपयोग सरल स्ट्रिंग प्रतिस्थापन हैrename .sql .php *.sql
आप एक बार में प्रत्येक फ़ाइल को संसाधित करने के लिए एक बैश वन-लाइनर का उपयोग कर सकते हैं:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
कार्य न हो (यानी बिजीबॉक्स)
वहाँ है rename(1)
, जो regexes का उपयोग नहीं करता है, लेकिन अपनी समस्या को हल कर सकते हैं:
rename .sql .php *.sql
वहाँ भी है mmv(1)
, लेकिन मैं अपरिचित हूँ कि यह कैसे काम करता है।
/usr/bin/rename
से लिंक /usr/bin/prename
, जो रेगीक्स लेता है।
अच्छा दिन,
आप प्रवेश करने का भी प्रयास कर सकते हैं
for i in $(\ls -d *.sql)
do
mv $i $(echo $i | sed -e 's/\.sql$/\.php/')
done
या इसे बनाने के लिए रेगेक्स के बदलाव को थोड़ा बदलकर इस्तेमाल करें
for i in $(\ls -d | egrep -e '.*\.sql')
do
mv $i $(echo $i | sed -e 's/\.sql$/\.php/')
done
मज़ा कोडिंग खोल के एक बिट के लिए। (-:
ls
आउटपुट को पार्स नहीं करना चाहिए ।
sed
यद्यपि यह उदाहरण काफी अच्छा है।
प्लंबर होने के नाते, मुझे पाइप पसंद हैं :)
नोट: यह उत्तर क्रिया है - एक नए व्यक्ति के रूप में मैं इसकी सराहना करता हूं जब कोई व्यक्ति जानता है कि उसे समझाने में समय लगता है, इसलिए मैं 'आगे' का भुगतान कर रहा हूं। यदि आप एक newbee नहीं हैं, तो कृपया लंबाई और वर्बोसिटी का बहाना करें।
ls -1 *_201[67][0-9]* | sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/' | bash
कहा पे:
ls -1 *_201[67][0-9]*
पैटर्न से मेल खाने वाली सभी फाइलों को सूचीबद्ध करता है, इस मामले में मैं 'YYYYMMDD' के रूप में फ़ाइल नाम में तारीख के साथ फ़ाइलों की तलाश कर रहा हूं
sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/'
# : | | | | | | | |: :
# : |^2....^ ^3..................^^4.......^ |: :
# :^1..............................................................^: :
# /................filename.................pattern................./...mkdir...and....mv...command.../
^ 1: 1 कब्जा समूह - पूरे फ़ाइलनाम
^ 2: 2 पर कब्जा समूह - फ़ाइल नाम पैटर्न का पहला भाग
^ 3: तीसरा कब्जा समूह - दूसरा फ़ाइल नाम भाग - यहाँ, 'YYYYMMDD' के रूप में दिनांक
^ 4: 4th कैप्चर ग्रुप - डेट और एक्सटेंशन के बीच वैकल्पिक फ़ाइलनाम भाग, और स्वयं एक्सटेंशन
Sooooo .... अगर मेरे पास एक फ़ाइल है जिसका नाम है
CallLog_555123412_20161231-214403.7z
...फिर
mkdir -p \2\/\3; mv \1 \2\/\3\/\1
वास्तव में मतलब है
# make directory and sub-directory
mkdir -p CallLog_555123412/20161231
# move file from current directory to sub-sub-directory just created
mv CallLog_555123412_20161231-214403.7z CallLog_555123412/20161231/CallLog_555123412_20161231-214403.7z
ध्यान दें कि इसे निष्पादित करने के लिए सेड कमांड का आउटपुट 'बैश' के माध्यम से पाइप किया जाता है। वास्तव में उन्हें स्थानांतरित करने के बिना प्रस्तावित फ़ाइल चालों को देखने के लिए, पहले 'हटा दें | अंत में बैश करें, और इसे इस तरह आज़माएं:
ls -1 *_201[67][0-9]* | sed -e 's/\(\(.\+\)[-_]\(201[67][0-9]\{4\}\)\([^.]\+\)\?\.[0-9a-z]\{2,3\}\)/mkdir -p \2\/\3; mv \1 \2\/\3\/\1/'
यह बिल्कुल भी बदलाव नहीं करेगा, लेकिन आपको कमांड दिखाई देगा जिसे निष्पादित किया जाएगा यदि आप इसे चलाते हैं '| bash 'अंत में टैग किया गया।
यह उपयोगी है क्योंकि आप फ़ाइल नाम में भागों से इच्छित किसी भी उप-निर्देशिका को बना सकते हैं, या कुछ और जो आप sed कमांड में 'प्रतिस्थापन' पाठ में जोड़ते हैं। ध्यान दें कि sed को बहुत सारे भागने वाले पात्रों की आवश्यकता होती है, हालाँकि।
SED रेगेक्स कोष्ठक:
(...) कैप्चर ग्रुपिंग के लिए भागने की आवश्यकता है -> \ (... \)
{m, n} को पिछली वस्तु को परिमाणित करने के लिए भागने की आवश्यकता है -> \ {m, n \}
/ प्रतिस्थापन स्ट्रिंग में भागने की आवश्यकता है -> \ /
[...] चरित्र वर्गों के लिए भागने की आवश्यकता नहीं है
प्रतिस्थापन स्ट्रिंग में \ 1 1 कैप्चर किए गए समूह को संदर्भित करता है, और इसी तरह ...
सुरक्षा चेतावनी: कभी भी 'आप' को नष्ट करने के लिए कुछ भी न छोड़ें, लेकिन आप पूरी तरह से बाहर की ओर बढ़ सकते हैं ...
आशा है कि कुछ रुकावटों को साफ करने में मदद करता है :)