वहाँ एक निर्देशिका में सभी फ़ाइलों का नाम बदलने के लिए एक तरीका है ?
मैं एक ऑनलाइनर कमांड की तलाश में हूं ।
मुझे 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
अधिक जानकारी के लिए।
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
अपने पैटर्न के बाद ।-maxdepth 0
: केवल वर्तमान निर्देशिका।rename
-n, -nono
: कोई कार्रवाई नहीं: नाम बदलने के लिए फ़ाइलों का नाम प्रिंट करें, लेकिन नाम न बदलें।y/source/dest/
: पैटर्न स्पेस में उन कैरेक्टर्स को ट्रांसलेट करें जो स्रोत में डिस्टर्ब में संबंधित कैरेक्टर में दिखाई देते हैं।
mv
ताकि आप देख सकें कि क्या किया जा रहा है; आप "-f" पास नहीं करना चाहते हैं क्योंकि यह मौजूदा फ़ाइलों को क्लोब कर सकता है