2008-08-25 5 views
8

मैं तीन फ़ाइलें कहो (। टेम्पलेट _ * txt):बैश वन लाइनर: f टेम्पलेट _ *। Txt को foo _ * txt में कॉपी करें?

  • template_x.txt
  • template_y.txt
  • template_z.txt

मैं तीन नई फ़ाइलें के लिए उन्हें कॉपी करना चाहते हैं (foo _ *। txt)।

  • foo_x.txt
  • foo_y.txt
  • foo_z.txt

वहाँ ऐसा करने के लिए है कि एक आदेश के साथ, उदाहरण के लिए कुछ सरल तरीका है

cp --enableAwesomeness template_*.txt foo_*.txt

उत्तर

11
 
for f in template_*.txt; do cp $f foo_${f#template_}; done 
1

मैं पार्टी में या सीपी पर कुछ भी के बारे में पता नहीं है, लेकिन वहाँ सरल तरीके (उदाहरण के लिए) का उपयोग कर एक पर्ल स्क्रिप्ट बात की इस तरह करने के लिए कर रहे हैं:

($op = shift) || die "Usage: rename perlexpr [filenames]\n"; 

for (@ARGV) { 
    $was = $_; 
    eval $op; 
    die [email protected] if [email protected]; 
    rename($was,$_) unless $was eq $_; 
} 

फिर :

rename s/template/foo/ *.txt 
+0

मेरी डेबियन प्रणाली पर, एक पर्ल स्क्रिप्ट पर स्थापित किया है '/ usr/bin/rename' (' perl' पैकेज का हिस्सा) जो वास्तव में बहुत कुछ करता है। –

1
for i in template_*.txt; do cp -v "$i" "`echo $i | sed 's%^template_%foo_%'`"; done 

शायद टूट जाता है, तो आपके फ़ाइल नाम उन में अजीब अक्षर होते हैं। '-v' को हटाएं जब (यदि) आपको विश्वास हो कि यह विश्वसनीय रूप से काम करता है।

2

यह काम करना चाहिए:

for file in template_*.txt ; do cp $file `echo $file | sed 's/template_\(.*\)/foo_\1/'` ; done 
0

फिर भी एक और तरीका यह करने के लिए:

$ ls template_*.txt | sed -e 's/^template\(.*\)$/cp template\1 foo\1/' | ksh -sx 

मैं हमेशा ImageMagick convert कार्यक्रम से प्रभावित किया गया है करता है कि आप क्या छवि प्रारूपों की अपेक्षा करें:

$ convert rose.jpg rose.png 

यह एक बहन प्रोग्राम है जो बैच रूपांतरण की अनुमति देता है:

$ mogrify -format png *.jpg 

जाहिर है इन छवि रूपांतरण के लिए सीमित हैं, लेकिन वे दिलचस्प कमांड लाइन इंटरफेस है।

1

कमांड mmv (Debian या Fink में उपलब्ध या स्वयं को संकलित करने में आसान) इस कार्य के लिए ठीक से बनाया गया था। सादा बैश समाधान के साथ, मुझे हमेशा परिवर्तनीय विस्तार के बारे में प्रलेखन देखना होगा। लेकिन mmv उपयोग करने के लिए बहुत आसान है, "उत्कृष्टता" के करीब है!;-)

आपका उदाहरण होगा:

mcp "template_*.txt" "foo_#1.txt" 

mmv रूप में अच्छी तरह और अधिक जटिल पैटर्न संभाल कर सकते हैं और यह कुछ विवेक की जाँच करता है, उदाहरण के लिए, यह दिखाई गंतव्य सेट में फ़ाइलों के बारे में सुनिश्चित कोई भी कर देगा स्रोत सेट में (इसलिए आप फ़ाइलों को गलती से ओवरराइट नहीं कर सकते हैं)।

3

मेरे पसंदीदा तरीका:

for f in template_*.txt 
do 
    cp $f ${f/template/foo} 
done 

"मैं-इसे याद रखने-प्रतिस्थापन-वाक्य रचना" जिस तरह से:

for i in x y z 
do 
    cp template_$i foo_$ 
done 
संबंधित मुद्दे