जवाबों:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
यह इनपुट फ़ाइल नाम से पहले 6 वर्णों को निकालने के लिए bash कमांड प्रतिस्थापन का उपयोग करता है cut
, CL
परिणाम के लिए प्रस्तुत करता है, और उस में संग्रहीत करता है $newname
। फिर यह पुराने नाम को नए नाम में बदल देता है। यह हर फाइल पर किया जाता है।
cut -c7-
निर्दिष्ट करता है कि इनपुट के बाद केवल इंडेक्स 7 के वर्णों को लौटाया जाना चाहिए। 7-
इंडेक्स 7 से शुरू होने वाली एक सीमा है जिसका कोई अंत नहीं है; वह है, लाइन के अंत तक।
पहले, मैंने उपयोग किया था cut -b7-
, लेकिन -c
इसका उपयोग चरित्र संज्ञाओं को संभालने के लिए किया जाना चाहिए जो कि प्रति वर्ण एकाधिक बाइट्स हो सकते हैं, जैसे UTF-8।
मैं कहूंगा कि यह केवल उस rename
कमांड का उपयोग करने के लिए सबसे सरल है जो कई लिनक्स वितरण पर आम है। इस कमांड के दो सामान्य संस्करण हैं, इसलिए इसके मैन पेज की जांच करें कि आपके पास कौन सा है:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
यदि आप एक डेबियन सिस्टम में उपयोग-लिनेक्स-एनजी से संस्करण का उपयोग करना चाहते हैं, तो यह नाम के तहत उपलब्ध है rename.ul
rename
जंगली में मौजूद कई संस्करण । अपने स्थानीय rename
प्रलेखन की जाँच करें कि कैसे तुम्हारा उपयोग करें।
rename TestSR '' *
rename "\<pre\>" "" *
->Unterminated <> operator at (user-supplied code).
शेल पैरामीटर विस्तार इस तरह के सरल परिवर्तनों के लिए पर्याप्त है। कमांड प्रतिस्थापन अतिरिक्त प्रक्रियाओं को स्पॉन करने की आवश्यकता के कारण कम कुशल है (कमांड प्रतिस्थापन स्वयं और cut
/ के लिए sed
)।
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*
फ़ाइलों को ढूँढता है, CL${f#TestSR}
नया नाम होगा। #
वसीयत के बाद का सामान फ़ाइल नाम ( f
) से प्रतिस्थापित किया जाएगा ।
यहाँ एक तरीका है:
ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
ls *.{h,m}
-> .h या .m एक्सटेंशन के साथ सभी फाइलें खोजेंn=CL
-> फ़ाइल नाम में एक सीएल उपसर्ग जोड़ेंsed -e 's/^Test//'
-> फ़ाइल नाम से परीक्षण उपसर्ग को हटाता हैmv $a $n
-> नाम बदलकर करता हैआप के साथ कोशिश कर सकते हैं:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
विवरण के लिए देखें man bash
(अनुभाग "पैरामीटर विस्तार")।
हालांकि, यह उतना कठिन नहीं था, हालांकि मैं।
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh]
, for f in TestSR*.{m,h}
, for f in TestSR*.m TestSR*.h
।
यदि आपको कुछ अधिक कठिन चाहिए तो आप ऐसा कर सकते हैं
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *