फ़ाइल नाम से उपसर्ग निकालें


10

मेरे पास फ़ाइलों का एक गुच्छा इस प्रकार है:

04602635_b0294.DAT20120807164534
04602637_b0297.DAT20120807164713
04602638_b0296.DAT20120807164637
04602639_b0299.DAT20120807164819
04602640_b0298.DAT20120807164748
04602641_b0300.DAT20120807164849
04602650_b0301.DAT20120807164921
04602652_b0302.DAT20120807164956

मुझे उपसर्ग को बाहर करने के लिए उनका नाम बदलने की आवश्यकता है। इसे ऐसे देखने की जरूरत है।

b0294.DAT20120807164534
b0297.DAT20120807164713
b0296.DAT20120807164637
b0299.DAT20120807164819
b0298.DAT20120807164748
b0300.DAT20120807164849
b0301.DAT20120807164921
b0302.DAT20120807164956

संपादित करें

मैं जोड़ना भूल गया कि मैं सोलारिस का उपयोग कर रहा हूं।

जवाबों:


19
for file in * ; do
    echo mv -v "$file" "${file#*_}"
done

यह संतुष्ट करने के लिए इसे चलाएं कि सब कुछ ठीक है।
यदि यह है, तो echoकमांड से हटा दें और यह फ़ाइलों का नाम बदल देगा जैसा आप चाहते हैं।

"${file#*_}"

खोल में एक सामान्य प्रतिस्थापन सुविधा है। यह पहले _चिन्ह (प्रतीक सहित) से पहले सभी वर्णों को हटा देता है । अधिक जानकारी के लिए यहां देखें


क्या आप बता सकते हैं कि वास्तव में क्या हो रहा है "${file#*_}"?
पीटर वान नीकेर

मैंने अपने उत्तर में स्पष्टीकरण जोड़ा।
भीड़

IMO, अधिकांश सभी स्क्रिप्ट वांछित कमांड आउटपुट को प्रतिध्वनित करने के लिए लिखा जाना चाहिए। लेकिन फिर हटा नहीं है echo, बस स्क्रिप्ट उत्पादन में पाइप bash
जिम एल

7

आप इसके लिए टूल का उपयोग कर सकते हैं rename:

rename "s/.*_//" *

यदि आप कहते हैं -nकि यह कुछ भी नाम नहीं बदलेगा और आपको दिखाएगा कि इसके बिना क्या किया जाएगा -n

रश की टिप्पणी के जवाब में: मेरी renameवास्तव में prenameडेबियन और उबंटू के perlपैकेज के साथ लिंक करने के लिए एक लिंक है ।


5
ध्यान दें, कि renameहमेशा विभिन्न प्रणालियों पर समान नहीं होता है और कभी-कभी इसका सिंटैक्स भिन्न हो सकता है।
भीड़

1
पूछने वाले ने अब जोड़ा है कि वह सोलारिस का उपयोग कर रहा है। तो यह नाम बदलें आदेश (जो डेबियन और डेरिवेटिव के लिए विशिष्ट है) उसके लिए उपलब्ध नहीं है।
गाइल्स का SO- बुराई को रोकना '

1
... जब तक वह इसे स्रोत से बनाने का प्रबंधन नहीं करता।
sendmoreinfo

@ गिल्स perl-renameडेबियन के लिए बिल्कुल भी विशिष्ट नहीं है। यह सिर्फ कहा जाता है नहीं कर रहा है rename, लेकिन perl-renameया prenameअन्य वितरण में। यह हमेशा रिपोज में होना चाहिए, हालांकि एक पर्ल के साथ भी स्थापित है
टेराडॉन

@terdon फ़ाइलों का नाम बदलने के लिए एक कमांड जिसका मूल उपयोग एक पर्ल अभिव्यक्ति है डेबियन के लिए विशिष्ट नहीं है। ऐसा आदेश, जिसे renameस्पष्ट रूप से एक पैकेज का अनुरोध किए बिना स्थापित करने की संभावना है और जिसे केवल नहीं कहा जाता हैrename , डेबियन के लिए विशिष्ट है। अन्य लिनक्स वितरण कमांड को कॉल करते हैं prenameया उपयोग perl-rename-लाइनक्स के साथ भ्रम से बचने के लिए renameऔर इसे पर्ल पैकेज के साथ बंडल नहीं करते हैं, और मुझे किसी भी गैर-लिनक्स यूनिक्स के बारे में पता नहीं है जो इसे नाम के तहत जहाज करता है renameया जो इसे में जहाज करता है किसी भी नाम के तहत डिफ़ॉल्ट स्थापना।
गाइल्स का SO- बुराई से दूर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.