बैच का नाम बदलने के लिए फ़ाइलें लोअरकेस


17

वहाँ एक निर्देशिका में सभी फ़ाइलों का नाम बदलने के लिए एक तरीका है ?

मैं एक ऑनलाइनर कमांड की तलाश में हूं ।

मुझे TotalCommander's से प्यार था alt+f7, अब मुझे टर्मिनल में उस कार्यक्षमता की आवश्यकता है

जवाबों:


20

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आदेश के अनुसार एसडीएस का सुझाव दिया।


4
आप "-v" पास करना चाहते हैं mvताकि आप देख सकें कि क्या किया जा रहा है; आप "-f" पास नहीं करना चाहते हैं क्योंकि यह मौजूदा फ़ाइलों को क्लोब कर सकता है
sds

यह उनके नाम पर रिक्त स्थान वाली फ़ाइलों के लिए काम नहीं करता है।
तियानज़ियांग ज़ियोन्ग

आप फ़ाइल नाम के आसपास उद्धरणों का उपयोग कर सकते हैं।
स्टेफ के

2
क्षमा करें, लेकिन ls * jpg के बारे में एक बुरा विचार है। mywiki.wooledge.org/ParsingLs आप उसी परिणाम को * jpg के साथ प्राप्त कर सकते हैं जहाँ आपके पास पहले स्थान पर * था।
tink

16

वहाँ एक और अधिक सुंदर और सामान्य उपयोगिता कहा जाता है 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 अधिक जानकारी के लिए।


1

का उपयोग करते हुए find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

के लिये find

  • बेशक -nameअपने पैटर्न के बाद ।
  • -maxdepth 0: केवल वर्तमान निर्देशिका।

के लिये rename

  • -n, -nono: कोई कार्रवाई नहीं: नाम बदलने के लिए फ़ाइलों का नाम प्रिंट करें, लेकिन नाम न बदलें।
  • y/source/dest/: पैटर्न स्पेस में उन कैरेक्टर्स को ट्रांसलेट करें जो स्रोत में डिस्टर्ब में संबंधित कैरेक्टर में दिखाई देते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.