मैं कैसे 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.