निर्देशिका में फ़ाइलों का नाम बदलें


10

निम्न फ़ाइल जैसी निर्देशिका में फ़ाइलों का नाम बदलने के लिए कैसे:, PMC21375.pdf.txtमुझे नाम बदलने की आवश्यकता है 21375.txt। यानी, मुझे दोनों PMCऔर pdfप्रत्येक फ़ाइल नाम से निकालने की आवश्यकता है ।

जवाबों:


9

साथ में ' rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

डेमो:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

से shellशीघ्र। यह बहुत उपयोगी है, आप कुछ डाल सकते हैंकोड की तरह मैं एक प्रतिस्थापन में करता हूं। जब आपके परीक्षण वैध हो जाते हैं तो

आप -n(ड्राई-रन मोड स्विच) को हटा सकते हैं ।

चेतावनी एक ही नाम के साथ अन्य उपकरण हैं जो ऐसा करने में सक्षम हो सकते हैं या नहीं कर सकते हैं, इसलिए सावधान रहें।

यदि आप निम्न कमांड चलाते हैं ( linux)

$ file $(readlink -f $(type -p rename))

और आप की तरह एक परिणाम है

.../rename: Perl script, ASCII text executable

तब यह सही उपकरण प्रतीत होता है =)

यदि नहीं, तो इसे डिफ़ॉल्ट रूप से (आमतौर पर पहले से ही मामला) बनाने Debianऔर व्युत्पन्न करने के लिए जैसे Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

( /path/to/renameअपने perl's renameआदेश के पथ को बदलें ।


अंतिम लेकिन कम से कम, यह उपकरण मूल रूप से लैरी वाल, पर्ल के पिता द्वारा लिखा गया था।


यह .pdfफ़ाइल नाम से नहीं निकालेगा ।
विलियम एवरेट

तदनुसार पोस्ट किया गया।
गाइल्स क्वेनोट

5

नाम बदलने के अलावा, आप इसे सीधे bash में कर सकते हैं (कई का सिर्फ एक तरीका):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

पिनाका को दिखाने के लिए संपादित कि यह कैसे काम करता है:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

यह .pdfफ़ाइल नाम से नहीं निकालेगा ।
विलियम एवरेट

या तुमने कोशिश की? क्योंकि मेरे लिए यह करता है। एडिट में दिखाया गया।
ह्मणतोलीउ

मेरी गलती। मुझे लगा कि यह सिर्फ बड़े अक्षरों में परिवर्तित होगा। Upvoted।
विलियम एवरेट

4

फ़ाइलों का नाम बदलने के लिए कई उपयोगिताओं हैं, लेकिन सबसे आसान उपयोग में से एक है rename। आपके मामले में, आप शायद कर सकते हैं:

rename PMC '' *txt
rename .pdf '' *txt

पहले पैरामीटर को बदलने के लिए फ़ाइलनाम का हिस्सा है। दूसरा पैरामीटर प्रतिस्थापन स्ट्रिंग है। यहां मैं ''खाली स्ट्रिंग का प्रतिनिधित्व करने के लिए उपयोग कर रहा हूं । निम्नलिखित सभी मापदंडों का नाम बदलने के लिए फाइलें हैं, यहां मैंने *txtपाठ फ़ाइलों के प्रतिस्थापन को सीमित करने के लिए उपयोग किया ।

renameयदि आप लिनक्स चला रहे हैं तो पहले से मौजूद होना चाहिए। यदि आप एक * बीएसडी या ओएस एक्स चला रहे हैं, तो आपको इसे पहले स्थापित करना पड़ सकता है।


मैं कोई बात नहीं है एक GNU है rename। एक से एक है util-linux, और एक से एक perlअलग वाक्यविन्यास। एक आप से एक की तरह दिखता है की बात कर रहे util-linuxहै कि कभी कभी कहा जाता है rename.ulतो के रूप में के साथ भ्रमित होने की नहीं renameसे perlहै, जबकि कुछ अन्य सिस्टम पर, renameutil-linux से एक और से एक है perlकहा जाता है prename
स्टीफन चेज़लस

1
मेरा उपयोग-लिनेक्स से एक है। मुझे गलती से लगा कि यह GNU कोरुटिल्स का हिस्सा है।
विंगडसुम्ब्रेनर

नाम बदलने का डिफ़ॉल्ट डेबियन संस्करण कुछ इस तरह होगाrename 's/PMC// *.txtrename s/\.pdf// *.txt
विलियम एवरेट

1

सबसे पहले अपनी फाइलों का बैकअप बनाएं! फिर मूल रूप से आप सामान्य फॉर्म के साथ मौजूदा निर्देशिका में एक अजगर वन-लाइनर का उपयोग कर सकते हैं:

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

अपने विशिष्ट मामले में, आप इसे दो बार उपयोग कर सकते हैं:

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

हटाने के लिए .pdfऔर फिर से:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

दूर करना PMC


0

इसे इस्तेमाल करे:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

j=${i//\.pdf/}साधन स्थानापन्न करने .pdfमें $iकुछ भी नहीं के साथ। इसी तरह दूसरे जे असाइनमेंट के साथ पीएमसी से छुटकारा पाएं।


0

यदि आप उपयोग कर रहे हैं zsh, तो यह एक सामान्य काम है zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmvसंभालता है संभावित संघर्षों को इनायत से)।

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