मेरे पिछले प्रश्न के अनुवर्ती के रूप में , अगर मेरे पास फॉर्म की कई फाइलें हैं
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.
सभी फ़ाइलों के बीच में निकालने के लिए मैं किस कमांड का उपयोग कर सकता हूं ?
\.
पैटर्न में शामिल हैं या नहीं ।
मेरे पिछले प्रश्न के अनुवर्ती के रूप में , अगर मेरे पास फॉर्म की कई फाइलें हैं
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.
सभी फ़ाइलों के बीच में निकालने के लिए मैं किस कमांड का उपयोग कर सकता हूं ?
\.
पैटर्न में शामिल हैं या नहीं ।
जवाबों:
आप अंतिम प्रश्न से उत्तर के काफी छोटे संशोधन के साथ ऐसा कर सकते हैं:
rename s/ras\.// sw.ras.*
या
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
स्पष्टीकरण:
rename
एक perl
स्क्रिप्ट है जो एक perl
नियमित अभिव्यक्ति और फ़ाइलों की एक सूची लेती है , बदले में प्रत्येक फ़ाइल के नाम पर रेगेक्स लागू करती है, और प्रत्येक फ़ाइल का नाम रीगेक्स लागू करने के परिणाम में बदल देती है। हमारे मामले में, शाब्दिक रूप से मेल खाता है ras
और \.
एक शाब्दिक .
रूप से मेल खाता है (जैसा कि .
अकेले एक नई रेखा के अलावा किसी भी चरित्र को इंगित करता है), और यह बदले में कुछ भी नहीं करता है।
for
पाश सभी फ़ाइलें के साथ शुरू लेता है sw.ras.
उन पर (मानक खोल ग्लोब) और छोरों। पहली घटना को ${var/search/replace}
खोजता $var
है search
और उसके साथ बदल देता है replace
, इसलिए पहले निकाले गए ${file/ras./}
रिटर्न के $file
साथ ras.
। कमांड इस प्रकार फ़ाइल को उसी नाम माइनस में बदल देती है ras.
। ध्यान दें कि इस खोज के साथ और प्रतिस्थापित किया जाता है, .
सचमुच लिया जाता है, विशेष चरित्र के रूप में नहीं।
एक अन्य विकल्प mmv (मास MoVe और नाम बदलना) का उपयोग करना है:
mmv '*ras.*' '#1#2'
अपने पैटर्न के चारों ओर एकल उद्धरण का उपयोग करने के लिए मत भूलना, अन्यथा तारों को शेल स्तर पर विस्तारित किया जाएगा।
उपयोगिता हमेशा उपलब्ध नहीं होती है लेकिन यदि यह नहीं है, तो आप इसे स्थापित कर सकते हैं:
sudo apt-get install mmv
मैन पेज यहाँ देखें ।
किसी भी POSIX अनुरूप खोल (में bash
, dash
, ksh
, आदि):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
या साथ rename
:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
मुझे हाल ही में कई फाइलों का एक थोक नाम बदलना पड़ा, जहां मुझे एक चरित्र की अंतिम घटना को बदलना पड़ा, जहां चरित्र कई बार फाइलनाम में हुआ। इस विशेष मामले में मुझे अंतिम डैश -
को एक अंडरस्कोर के साथ बदलना था _
, इसे बदलकर:
some-long-file-name.ext
इस मामले में:
some-long-file_name.ext
इसमें कुछ समय लगा लेकिन इसने आखिरकार ऐसा किया:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
यहाँ:
${i%-*}
डैश के अंतिम घटना तक फ़ाइल नाम की शुरुआत से मेल खाता है -
${file##*-}
डैश के अंतिम घटना के बाद शेष फ़ाइल नाम से मेल खाता है -
ras
, यानी साथ खत्मsw..001
, याras.
, छोड़नेsw.001
?