2012-03-26 7 views
11

मैं एक शॉट में फ़ाइलों का एक समूह नाम बदलने के लिए लिनक्स कमांड लाइन एक-लाइनर की तलाश में था।फाइलों के समूह का नाम बदलने के लिए एक लाइनर

pattern1.a pattern1.b pattern1.c ... 

एक बार आदेश निष्पादित किया जाता है मैं मिलना चाहिए

pattern2.a pattern2.b pattern2.c ... 
+0

संभावित डुप्लिकेट [यूनिक्स में एकाधिक फ़ाइलों का नाम बदलें] (http://stackoverflow.com/questions/1086502/rename-multiple-files-in-unix) –

उत्तर

12
for i in pattern1.*; do mv -- "$i" "${i/pattern1/pattern2}"; done 

इससे पहले कि आप इसे चलाने, यह क्या करना होगा देखने के लिए mv के सामने एक echo चिपके रहते हैं।

1

इस बिल्ली को त्वचा के कई तरीके। यह एक पहले

find . -print | sed -ne '/^\.\/pattern1\(\..*\)/s//mv "&" "pattern2\1"/p' 

रूप Kerrek अपने जवाब के साथ सुझाव दिया,: यदि आप अपने प्रतिमान पसंद करते हैं एक regex के बजाय एक fileglob होने के लिए, और आप परिवर्तन करना चाहते हैं, तो रिकर्सिवली आप कुछ इस तरह इस्तेमाल कर सकते हैं आपको दिखाता है कि यह क्या करेगा। आउटपुट के साथ सहज होने के बाद आउटपुट को एक खोल के माध्यम से पाइप करें (यानी | sh अंत में जोड़ें)।

यह मेरे लिए काम करता है:

[[email protected] ~]$ ls -l foo.* 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 foo.txt 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' 
mv "./foo.txt" "bar.txt" 
mv "./foo.php" "bar.php" 
[[email protected] ~]$ find . -print | sed -ne '/^\.\/foo\(\..*\)/s//mv "&" "bar\1"/p' | sh 
[[email protected] ~]$ ls -l foo.* bar.* 
ls: foo.*: No such file or directory 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.php 
-rw-r--r-- 1 ghoti wheel 0 Mar 26 13:59 bar.txt 
[[email protected] ~]$ 
+0

क्या हमें वहां "त्वचा को बिल्ली" रूपक की आवश्यकता है? : डी –

11

आप लिनक्स का उपयोग कर रहे हैं तो, आप भी एक पर्ल स्क्रिप्ट/usr/bin में/हो सकता है नाम बदलने जो गन्ना खोल ग्लोबिंग तुलना में अधिक जटिल पैटर्न पर आधारित नाम बदलने फ़ाइलों परमिट।

/usr/bin/मेरे सिस्टम में से एक का नाम here दस्तावेज किया गया है। जानकारी के लिए अपने सिस्टम पर

rename pattern1 pattern2 pattern1.* 

चेक man rename: यह इस तरह से इस्तेमाल किया जा सकता है:

rename "s/pattern1/pattern2/" pattern1.* 

other Linux environments की संख्या एक अलग rename है कि इस तरह इस्तेमाल किया जा सकता है लगता है।

+1

दूसरे नाम के उदाहरण के लिए अंगूठे ऊपर; पूरे वेब पर खोज की गई और समस्या नहीं मिली क्योंकि 's/pattern1/pattern2 /" 'काम नहीं किया! –