निर्देशिका पथ को बनाए रखने के बिना, फ़ाइलों का नाम बदलने का सबसे तेज़ तरीका


56

मुझे पता है कि यूनिक्स में फ़ाइलों का नाम कैसे बदला जाए:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

~/folder/subfolder/fileदो बार दोहराने में बहुत लंबा समय लगता है ।

क्या कोई तेज़ तरीका है?

जवाबों:


104

अपने खोल तो समर्थित ब्रेस विस्तार (के साथ काम करता csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh, yashसाथ ब्रेस विस्तार को फोन करके सक्षम yash --brace-expandया साथ interative खोल में सेट set -o brace-expand, या fish):

mv ~/folder/subfolder/file.{txt,sh}

4
सरल सबसे अच्छा है!
ब्रिअम

2
खोल में विस्तार का भयानक उपयोग शानदार!
harish.venkat

3
यह है भयानक है, लेकिन वास्तव में गुप्त। यह काम करता है, लेकिन पहली नज़र में मुझे लगता है कि यह कुछ अलग करता है: दो फ़ाइल को कहीं ले जाता है। मुझे नहीं लगता कि यह एक महान विचार है, खासकर जब से एक बेहतर समाधान का उपयोग कर रहा है rename
यो

4
@tohecz: यह गुप्त क्यों है? यह शेल की एक विशेषता है और शेल मैन पेज को पढ़कर हर कोई इसे जान सकता है। और मुझे नहीं लगता कि renameयह एक बेहतर उपाय है क्योंकि renameआप कभी भी मौजूदा फ़ाइल को ओवरराइड करने के लिए नहीं कहते हैं या नहीं।
cuonglm

1
@Gnouc तुम आदमी हो।
शुरुआत

20

आप भी उपयोग कर सकते हैं rename( उपयोग -लिनक्स पैकेज का हिस्सा)।

rename .txt .sh ~/folder/subfolder/file.txt

देखें नाम बदलने आदमी पेज अधिक जानकारी के लिए।


+1 यह स्पष्ट तरीका है कि इसे कैसे किया जाए, गोले की {a,b}कार्यक्षमता पर निर्भर होने से बेहतर है ।
यो

5
कुछ लिनक्स डिस्ट्रोस (जैसे कि उबंटू) में, renameएक पूरी तरह से अलग, पर्ल-आधारित प्रोग्राम है। वहां, आप उपयोग करेंगे rename 's/txt$/sh/' ~/folder/subfolder/file.txt
evilsoup

डेबियन (और उबंटू) पर भी है mmv
ctrl-alt-delor

10

उपरोक्त सभी अच्छे हैं। यह भी काम करेगा:

( cd ~/folder/subfolder && mv file.txt file.sh )

यह मेरे लिए काम नहीं करता है!
कामरावा

यदि आप sudoभाग को हटाते हैं तो यह काम करेगा ।
कुथुलु

1
@Cthulhu हाँ आपका अधिकार। लेकिन साथ काम क्यों नहीं करता है sudo?
कामरावा

2
@HamedKamrava शायद इसलिए क्योंकि sudoयह ~रूट के होम डायरेक्टरी के रूप में व्याख्या करता है।
कैथलु

आप कर सकते sudoहैं mv, लेकिन नहीं cd। देखें क्यों सीडी एक खोल में बनाया गया है और आप कर सकते हैं नहीं।sudo(
Ctrl-Alt-delor

6

नहीं, आपको नाम बदलने के लिए फ़ाइल को पूरा रास्ता देना होगा। चलाने के पहले लक्ष्य फ़ोल्डर में जाने का एकमात्र विकल्प है mv:

cd ~/folder/subfolder/
mv file.txt file.sh

वैकल्पिक रूप से, आप एक छोटे से कार्य को लिख सकते हैं, जो फ़ाइल को लक्ष्य निर्देशिका में बदल देता है। उदाहरण के लिए, इन पंक्तियों को अपनी शेल आरंभीकरण फ़ाइल में जोड़ें ( ~/.bashrcयदि आप उपयोग कर रहे हैं bash):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}

फिर, एक नया टर्मिनल खोलें या सिर्फ source ~/.bashrcinit फ़ाइल को फिर से पढ़ने के लिए चलाएँ और आप यह कर सकते हैं:

lmv ~/folder/subfolder/file.txt file.sh

lmv()समारोह के लिए +1 । मुझे नहीं पता था कि :)
कामरेड का नाम

1
@HamedKamrava इसे कोई नहीं जानता था। मैंने अभी इसे लिखा है, यह कुछ भी मानक नहीं है।
terdon

2
मुझे पता है। मेरा मतलब है कि मुझे नहीं पता था कि मैं अपना फ़ंक्शन लिख सकता हूं!
कामरावा

2

बस क्यूंग्लम के उत्तर की उपयोगिता का विस्तार करने के लिए (जैसा कि मैं उसके समाधान से प्यार करता हूं किसी भी क्रेडिट को लेने के लिए नहीं) और उसका जवाब एक सही है।

उपयोग मामला यह है कि हम अक्सर किसी फ़ाइल को दूरस्थ स्थान (वास्तविक समस्या) में बदलना चाहते हैं, जैसे /folder/subfolder/configFile.dat को configFile.dat.orig

कमांड का यह रूप एक फ़ाइल एक्सटेंशन जोड़ता है (मूल एक्सटेंशन की जगह नहीं)

mv ~/folder/subfolder/file.txt{,.orig}

समझाया गया: "{। .Orig}" का अर्थ (कुछ) ".or" के साथ फ़ाइल नाम के अंत में प्रतिस्थापित (कुछ भी नहीं) है। "

या इसमें फ़ाइल एक्सटेंशन हटाने के (नाम बदलें)

mv ~/folder/subfolder/file.txt{.orig,}

नोट: अभी भी विषय के लिए "डायर पथ को पुनः बनाए बिना फ़ाइलों का नाम बदलने का सबसे तेज़ तरीका"


1

हाँ। यदि तुम प्रयोग करते होbash , तो आप करते हैं sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd

जो वास्तव में बड़ा है और यदि आपने मूल निर्देशिका तक पहुँच अनुमतियाँ खो दी हैं तो आप असफल हो सकते हैं popd


1
का फ़ायदा क्या है pushdऔर popdयहाँ? यह कैसे बेहतर है cd ~/folder/subfolder/ && sudo mv file.txt file.sh?
terdon

1
मुद्दा यह है, कि आप अपने द्वारा शुरू किए गए फ़ोल्डर में कमांड वापस आने के बाद हैं, किसी सबफ़ोल्डर में नहीं। इसका pushd popdउपयोग करने cdऔर वापस जाने के लिए एक विकल्प है cd -
जोफेल

प्रश्नकर्ता ने कार्यशील निर्देशिका को बदलने का इरादा नहीं करने के लिए कहा, और जब उपलब्ध हो popdतो बेहतर है cd ../../
41754

7
(cd /path/to/there && mv x y)तब (एक
उपधारा के

आपको वास्तव में sudoपहले नहीं डालना चाहिए pushd। तो पूरा कमांड होना चाहिए pushd ...dir && sudo mv old new && popd। एक विकल्प के रूप में, कोई भी ऐसा कर सकता है (cd ...dir; sudo mv old new)क्योंकि उप-भाग में चलने से स्वचालित रूप से निर्देशिका परिवर्तनों का ध्यान रखा जाएगा।
मिकको रेंटालिनेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.