प्रीफ़िक्स या प्रत्यय को जोड़ने वाली स्थानीय फ़ोल्डर में फ़ाइलों का नाम बदलें


12

मेरे पास एक फ़ोल्डर में कई फाइलें हैं और मैं उनके लिए उपसर्ग या प्रत्यय ( दोनों नहीं ) जोड़ना चाहता हूं। मैंने यहां जांच की और पाया कि मैं इसका उपयोग कर सकता हूं

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

में समाप्त होने वाली सभी फ़ाइलों में एक उपसर्ग जोड़ने के लिए .jpg(और अगर मैं हटाता हूं .jpg, तो यह वर्तमान फ़ोल्डर में सभी फ़ाइलों के लिए उपसर्ग जोड़ देगा)।

हालाँकि, मैं चाहूंगा कि मैं सक्षम हो जाऊं

  • एक SUFIX जोड़ें (यह है कि, नाम बदलने filename.extके लिए filename.whatever.ext),
  • जांचें कि क्या उपसर्ग या प्रत्यय पहले से मौजूद है और फिर छोड़ दें,
  • एक ऐसा उपनाम बनाएं जो addprefix whatever *.extया जैसे तर्कों को स्वीकार करता हैaddsufix whatever *.*

जवाबों:


10

यदि आप उपयोग कर रहे हैं bash, तो यह वन-लाइनर आपके लिए कर सकता है (यह मानते हुए कि आपके पास चर हैं $prefix, $suffixऔर $extensionआसानी से उपलब्ध हैं)

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

आप अपनी स्क्रिप्ट इस तरह हो सकते हैं

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

तथा

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done

यह लगभग सही है! अगर यह उपसर्ग या प्रत्यय पहले से मौजूद है (और फिर छोड़ दिया गया है), और (2) बिना किसी एक्सटेंशन वाली फाइलों पर काम किया तो यह सही होगा। बहुत परेशान करने के लिए क्षमा करें ...
ब्राजील के लड़के ने

(1) के लिए आप (मुझे लगता है, परीक्षण नहीं किया गया है) में mv को लपेटकर उपसर्ग चेक जोड़ if [ $f == $prefix* ]सकते हैं और आप if [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]जोड़े में mv कमांड के चारों ओर प्रत्यय बदल सकते हैं । (2) के लिए यह पहले से ही बिना किसी एक्सटेंशन वाली फाइलों पर काम करना चाहिए, जब तक कि मैं एक भयानक प्रोग्रामर नहीं हूं।
एरोन ओकेनो

7

वहाँ एक पर्ल renameकमांड है जिसे ट्रिक करना चाहिए। हालांकि सावधान रहें: कई अलग-अलग कमांड हैं rename, इसलिए सुनिश्चित करें कि आपको पर्ल स्क्रिप्ट मिल गई है जो perlexprइसके तर्क के रूप में उम्मीद करती है। यह डेबियन और डेरिवेटिव्स (उबंटू, मिंट, ...) पर पैकेज renameद्वारा प्रदान की गई कमांड है perl, लेकिन अन्य वितरणों पर नहीं, जिसे एक अलग उपयोगिता कहा जा सकता है rename

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

जैसा कि आप देख सकते हैं, यह आदर्श है - जब आप इसे कई बार कॉल करते हैं तो यह उपसर्ग फिर से नहीं जोड़ेगा।

यह स्ट्रिंग्स ( ^) की शुरुआत (शून्य-लंबाई) की जगह या उसके बाद वैकल्पिक prefixस्ट्रिंग के साथ शुरू करके काम करता है prefix

मैं इसे आपके लिए एक अभ्यास के रूप में एक शेल स्क्रिप्ट या शेल फ़ंक्शन में इनकैप्सुलेट करना छोड़ दूंगा :)

पोस्टफ़िक्स हालांकि थोड़ा कठिन है, क्योंकि आपको यह पता लगाना है कि फ़ाइल नाम का कौन सा भाग एक्सटेंशन का निर्माण करता है ...


यह एक अच्छा जवाब है, लेकिन मैं कुछ और सार्वभौमिक की तलाश में था; इस उत्तर के लिए आपको दोनों पर्ल चाहिए और यह विशिष्ट (या समतुल्य) renameमौजूद है। और मुझे पता है कि प्रत्यय थोड़ा कठिन है, यह लिंक किए गए प्रश्न में शामिल नहीं था, और मैं linux, bash, shell script, perl और नियमित अभिव्यक्तियों पर एक शुरुआत कर रहा हूं, इसलिए "थोड़ा कठिन" मेरे लिए काफी कठिन है ! :)
वह ब्राजील के लड़के

4

के साथ zsh:

autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'

~ग्लोबिंग ऑपरेटर है, जिसका मतलब है सिवाय में zsh


1

उपसर्ग और वर्तमान फ़ोल्डर में सभी छवियों के विस्तार को बदलने के लिए सरल उदाहरण।

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

यदि आप यह जांचना चाहते हैं कि इको द्वारा mv को बदलने से पहले यह आपके डेटा को कैसे प्रभावित करेगा

IMG_7993.JPG के लिए आउटपुट EG_IMG_7993.jpg है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.