मैं लोअरकेस में सभी फ़ाइलों का नाम कैसे बदलूं?


123

मेरे पास उदाहरण के लिए TREE.wav, ONE.WAV है। मैं इसका नाम बदलकर पेड़ करना चाहता हूं। मैं लोअरकेस में सभी फ़ाइलों का नाम कैसे बदलूं?


1
क्या आप टर्मिनल / शेल समाधान के साथ सहज हैं? या क्या आप चाहते हैं कि सी / उद्देश्य-सी कोड को पूरा करने के लिए?

टर्मिनल समाधान ठीक होगा।
Voloda2

3
मुझे लगता है कि इसे फिर से खोलना चाहिए। टर्मिनल कोड कोड के साथ
Danield

1
स्टैकओवरफ्लो पर यह एक वैध प्रश्न होना चाहिए। यह भी कोड है।
एडीवी

जवाबों:


371

यदि आप टर्मिनल के साथ सहज हैं:

  1. टर्मिनल को खोलें। टाइप करें, cdऔर फिर विंडो में नाम बदलने के लिए फ़ोल्डर युक्त फ़ोल्डर को खींचें और छोड़ें।
  2. सही निर्देशिका में होने की पुष्टि करने के लिए, टाइप करें lsऔर हिट दर्ज करें।
  3. यह कोड पेस्ट करें और एंटर दबाएं:

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
  4. यह पुष्टि करने के लिए कि आपकी सभी फाइलें नीची हैं, lsफिर से टाइप करें और हिट करें।

(कुछ सुधार के लिए ट्विटर पर @bavarious का धन्यवाद, और केस-असंवेदनशील फाइल सिस्टम पर यह सुरक्षित बनाने के लिए नीचे जॉन व्हिटले को धन्यवाद।)


9
सावधान रहे। यदि आपके पास नाम की फाइलें हैं foo.txtऔर FOO.TXT, यह उनमें से एक को रोक सकता है।
कीथ थॉम्पसन

1
बैश के साथ, आप बस कर सकते हैं: mv "$f" "${f,,}"याdeclare -l g=$f; mv "$f" "$g"
ग्लेन जैकमैन

2
मैं इन सभी आदेशों की कोशिश की, मैं "mv: 'PPP.txt' और 'ppp.txt' एक ही फ़ाइल हैं" और यह कम फ़ाइल मेरी फ़ाइल ... किसी भी विचार नहीं है? क्या यह उसी निर्देशिका में होने के कारण है?
लोरलेस

1
user2066039: यह मैक पर हाल ही में होना चाहिए, क्योंकि एक वर्ष से अधिक पुराने उत्तर इसके लिए जिम्मेदार नहीं हैं। मैंने 'jpg1' जैसे मध्यवर्ती विस्तार का उपयोग करके कार्य पूरा किया। तो, JPG -> jpg1 -> jpg उम्मीद है की वो मदद करदे।
जॉइस

14
ओएस एक्स उपयोगकर्ताओं को केस-असंवेदनशील फाइलसिस्टम के कारण पहले प्रत्येक फ़ाइल को एक अस्थायी नाम में बदलना चाहिए, जैसे: for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
जॉन व्हिटली

10

जैसा कि पूछा गया सवाल सामान्य है, और महत्वपूर्ण भी है, इसलिए मैं अधिक सामान्य उत्तर प्रदान करना चाहता हूं:

सरलतम मामला (अधिकांश समय और मैक ओएस एक्स पर सुरक्षित है, लेकिन इस पर पढ़ें):

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

आपको फ़ाइल नाम (किसी भी OS) में रिक्त स्थान भी संभालना होगा:

IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

आपको उन फ़ाइल नाम को सुरक्षित रूप से संभालने की आवश्यकता है जो केवल केस-संवेदी फाइल सिस्टम में मामले से भिन्न होते हैं और लक्ष्य को अधिलेखित नहीं करते हैं (जैसे लिनक्स):

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done 

मैक ओएस एक्स के बारे में ध्यान दें:

मैक का फाइलसिस्टम केस-असंवेदनशील है, केस-संरक्षण है।

हालाँकि, अस्थायी फ़ाइलों को बनाने की आवश्यकता नहीं है, जैसा कि स्वीकृत उत्तर और टिप्पणियों में सुझाया गया है, क्योंकि दो फ़ाइल नाम जो केवल मामले से भिन्न होते हैं, पहले स्थान पर मौजूद नहीं हो सकते, रेफ

यह दिखाने के लिए:

$ mkdir test
$ cd test
$ touch X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 X
$ mv X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 x

हां - लेकिन आपका उदाहरण बताता है कि आप 'mv X x' का उपयोग करके फाइलनेम को कम कर सकते हैं। तो यह केवल था कि मैंने टिप्पणी की।
cpaludan

mojave 10.14.5: # स्पर्श X x # ls -la कुल 0 -rw-r - r-- 1 मूल जड़ 0 Jun 24 15:19 X # mv X x mv: 'X' और 'x' समान हैं फ़ाइल # ls -la -rw-r - r-- 1 रूट रूट 0 Jun 24 15:19 X
cpaludan

गंदे प्रारूपण के लिए क्षमा करें। एसओ वहां मेरे प्रति दयालु नहीं थे।
cpaludan

1
और मेरा बुरा - एक साझा ड्राइव पर मेरी रास्पबेरी पर एक ssh में था (hfsplus स्वरूपित) - वहां यह काम नहीं करता है। लेकिन मेरे मैक पर स्थानीय रूप से यह करता है।
cpaludan

मैं में * के लिए; do j = $ (tr '[: अपर:]' ': [: निचला:]' <<< "$ i"); mv "$ i" "$ j"; मेरे लिए उत्प्रेरक पर काम किया। धन्यवाद।
सिनान एल्डेम

2

एक मछली खोल संस्करण:

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.