मैं कैसे bash में वर्णों को हटाकर कई फ़ाइलों का नाम बदल सकता हूं?


10

मुझे प्रत्येक फ़ाइलनाम के लिए पहले 5 वर्णों को हटाकर निर्देशिका में कई फ़ाइलों का नाम बदलना है।
मैं इसे कैसे कर सकता हूँ मैं बैश / शेल? मैं Ubuntu 11.10 का उपयोग कर रहा हूं। धन्यवाद।

जवाबों:


11

एक सा के साथ पाश के लिए एक सरल sedचाल करेंगे:

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

स्थानापन्न regex में sedकिसी भी पांच अक्षरों (मिलान करने के लिए कहते हैं .स्ट्रिंग (के शुरू में साधन किसी भी चरित्र) ^) कर निकाल दें।


9

बैश में कुछ अद्भुत स्क्रिप्टिंग संभावनाएं हैं। यहाँ एक तरीका है:

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

यह क्या परीक्षण करने के लिए एक आसान तरीका होगा करना आदेश के सामने एक गूंज जोड़ने के लिए है:

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

छह प्रश्न चिह्न यह सुनिश्चित करते हैं कि आप केवल 5 वर्णों से अधिक फ़ाइल नाम के लिए ऐसा करने का प्रयास करते हैं।


5

आप ऐसा करने के लिए sed का उपयोग कर सकते हैं

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done

5

सभी महान जवाब, धन्यवाद। मेरे मामले में यह काम किया है:

rename 's/^.......//g' *

1

मेरे दो सेंट':

for file in *; do mv $file ${file:5}; done

${file:n}nस्ट्रिंग में पहले वर्णों को निकालता है file


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