वहाँ एक निर्देशिका में सभी फ़ाइलों का नाम बदलने के लिए एक तरीका है ?
मैं एक ऑनलाइनर कमांड की तलाश में हूं ।
मुझे TotalCommander's से प्यार था alt+f7, अब मुझे टर्मिनल में उस कार्यक्षमता की आवश्यकता है
वहाँ एक निर्देशिका में सभी फ़ाइलों का नाम बदलने के लिए एक तरीका है ?
मैं एक ऑनलाइनर कमांड की तलाश में हूं ।
मुझे TotalCommander's से प्यार था alt+f7, अब मुझे टर्मिनल में उस कार्यक्षमता की आवश्यकता है
जवाबों:
a_fileवर्तमान निर्देशिका में प्रत्येक फ़ाइल के a_fileलिए निचले मामले में नाम बदलें ।
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
ऊपरी मामले के लिए तर्कों को उल्टा कर दें [:lower:] [:upper:]
trकमांड संदर्भ लिंक
अपडेट करें
और भी अधिक नियंत्रण के *साथ प्रतिस्थापित किया जा सकता है ls।
उदाहरण के लिए 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg और 3.jpg युक्त निर्देशिका में केवल * .jpg फ़ाइलों को फ़िल्टर करने के लिए, lsका उपयोग किया जा सकता है:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
उपरोक्त कोड a_file.jpg एक्सटेंशन के साथ सभी फ़ाइलों को चर करने के लिए असाइन करेगा ।
अद्यतन जोड़ा -vकरने का विकल्प mvआदेश के अनुसार एसडीएस का सुझाव दिया।
वहाँ एक और अधिक सुंदर और सामान्य उपयोगिता कहा जाता है prename।
लैरी वॉल द्वारा लिखित, यह perlआपके सिस्टम पर पहले से ही उपलब्ध होने की संभावना के साथ आता है क्योंकि /usr/bin/prename(यदि आपके पास सेटअप विकल्प हैं, /usr/bin/renameतो / आदि / विकल्पों के माध्यम से सहानुभूति के रूप में भी उपलब्ध हो सकता है prename)
इसका उपयोग करके आप किसी भी पर्ल अभिव्यक्ति (जिसमें प्रतिस्थापन s///या चार लिप्यंतरण तक सीमित नहीं है) प्रदान करके एक से अधिक फ़ाइलों का नाम बदल सकते हैं tr///:
उदाहरण:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
और इसी तरह।
एक अन्य अच्छी बात यह है कि यह किसी फ़ाइल को मौजूदा फ़ाइल नाम में बदलने के मामले में, आपकी रक्षा करता है।
man prename अधिक जानकारी के लिए।
findfind . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find-nameअपने पैटर्न के बाद ।-maxdepth 0: केवल वर्तमान निर्देशिका।rename-n, -nono: कोई कार्रवाई नहीं: नाम बदलने के लिए फ़ाइलों का नाम प्रिंट करें, लेकिन नाम न बदलें।y/source/dest/: पैटर्न स्पेस में उन कैरेक्टर्स को ट्रांसलेट करें जो स्रोत में डिस्टर्ब में संबंधित कैरेक्टर में दिखाई देते हैं।
mvताकि आप देख सकें कि क्या किया जा रहा है; आप "-f" पास नहीं करना चाहते हैं क्योंकि यह मौजूदा फ़ाइलों को क्लोब कर सकता है