मैं कमांड लाइन का उपयोग करके आसानी से कई फ़ाइलों का नाम कैसे बदलूं?


103

विंडोज़ में फ़ाइलों का नाम बदलने के तरीकों में से एक है

F2 > Rename > Tab (to next file) > Rename ...

लेकिन Ubuntu / Nautilus में, मैं अगली फ़ाइल पर टैब नहीं कर सकता। लेकिन लिनक्स पर होने के नाते, मुझे लगता है कि एक कमांड लाइन विकल्प होना चाहिए।

हालांकि, कभी-कभी, मैं विशिष्ट फ़ाइलों का नाम बदलने के तरीके पर अधिक नियंत्रण चाहता हूं। उस स्थिति में, शायद इसकी बेहतर अगली फ़ाइल में टैब करने में सक्षम हो


1
क्या आप "अधिक नियंत्रण" को परिभाषित कर सकते हैं? निश्चित नहीं कि आप क्या पूछ रहे हैं ..
डांग खोआ

मुझे लगता है कि इस सवाल का जवाब नहीं है। जो आप पूछ रहे हैं (F2 और फिर अगली फ़ाइल में F2 मोड में कूदें) वर्तमान में उपलब्ध नहीं है जो मुझे लगता है कि नौटिलस में है।
don.joey

जवाबों:


187

मैं renameहर समय उपयोग करता हूं । यह बहुत आसान है, लेकिन उम्मीद है कि आप मूल regex जानते हैं:

rename "s/SEARCH/REPLACE/g"  *

यह स्ट्रिंग SEARCHको REPLACEप्रत्येक फ़ाइल (जो है *) के साथ बदल देगा । /gवैश्विक का अर्थ है, इसलिए यदि आपके पास SEARCH_SEARCH.jpgइसका नाम है, तो इसका नाम बदल दिया जाएगा REPLACE_REPLACE.jpg। यदि आपके पास नहीं होता /g, तो यह केवल एक बार प्रतिस्थापन होता, और अब नाम दिया गया REPLACE_SEARCH.jpg। यदि आप केस-असंवेदनशील चाहते हैं, तो जोड़ें /i(जो होगा, /giया /igअंत में)।

नियमित अभिव्यक्तियों के साथ, आप बहुत अधिक कर सकते हैं।

ध्यान दें कि यह renameहै prename(उर्फ पर्ल rename) आदेश, जो पूरा पर्ल नियमित अभिव्यक्ति का समर्थन करता है। एक और है renameजो पैटर्न का उपयोग करता है, और उतना शक्तिशाली नहीं है। prenameउबंटू पर डिफ़ॉल्ट रूप से (पर्ल के साथ) स्थापित किया जाता है, लेकिन अब आपको यह करना पड़ सकता है:

sudo apt install rename

कुछ उदाहरण निम्नलिखित हैं:

उपसर्ग

जोड़ें :

rename 's/^/MyPrefix_/' * 
  • document.pdf का नाम बदल दिया MyPrefix_document.pdf

निकालें :

इसके अलावा, आप अवांछित तारों को हटा सकते हैं। मान लीजिए कि आपके पास 20 एमपी 3 फाइलें हैं जैसे कि CD RIP 01 Song.mp3आप चाहते हैं और आप "सीडी रिप" भाग को हटाना चाहते हैं, और आप उन सभी को एक कमांड से हटाना चाहते हैं।

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 सेवा 01 Song.mp3

अंतरिक्ष में अतिरिक्त स्थान पर ध्यान दें, अंतरिक्ष के '^CD RIP 'बिना सभी फाइलों में फ़ाइल के पहले चरित्र के रूप में एक स्थान होगा। यह भी ध्यान दें, यह ^चरित्र के बिना काम करेगा , लेकिन CD RIP फ़ाइल नाम के किसी भी भाग में मेल खाएगा । ^गारंटी देता है यह केवल पात्रों को हटा वे फ़ाइल की शुरुआत कर रहे हैं।

प्रत्यय

जोड़ें :

rename 's/$/_MySuffix/' *
  • document.pdf का नाम बदल दिया document.pdf_MySuffix

बदलें :

rename 's/\.pdf$/.doc/' *

में बदल Something.pdfजाएगा Something.doc। (बैकस्लैश का कारण है, .regexp में वाइल्डकार्ड कैरेक्टर है, इसलिए .pdfमेल खाता है qPDFजबकि \.pdfकेवल सटीक स्ट्रिंग से मेल खाता है .pdf। यह भी ध्यान रखना बहुत महत्वपूर्ण है, अगर आप BASH से परिचित नहीं हैं, तो आपको SINGLE उद्धरणों में बैकस्लैश डालना होगा! या दोहरे उद्धरण चिह्नों का उपयोग करें, या बैश उन्हें अनुवाद करने का प्रयास करेंगे। बैश \. और "\." बराबर करने के लिए .। (लेकिन डबल-कोट्स और बैकस्लैश का उपयोग किया जाता है, उदाहरण के लिए "\ n" एक नई पंक्ति के लिए, लेकिन चूंकि "\."यह एक वैध बैक एस्केप अनुक्रम नहीं है, इसलिए में अनुवाद .)

वास्तव में, आप पूरे के बजाय उद्धरण में स्ट्रिंग के हिस्सों को भी संलग्न कर सकते हैं: BASH 's/Search/Replace/g'के समान s/'Search'/'Replace'/gऔर समान है s/Search/Replace/g। आपको बस विशेष पात्रों (और रिक्त स्थान) के बारे में सावधान रहना होगा।


मेरा सुझाव है कि -nविकल्प का उपयोग करते समय जब आप सकारात्मक नहीं होते हैं तो आपके पास सही नियमित अभिव्यक्ति होती है। यह दिखाता है कि क्या नाम बदला जाएगा, फिर इसे किए बिना बाहर निकलता है। उदाहरण के लिए:

rename -n s/'One'/'Two'/g *

यह उन सभी परिवर्तनों को सूचीबद्ध करेगा जो उसने किए होंगे, क्या आपने -nवहां झंडा नहीं लगाया था । यदि यह अच्छा लगता है Up, तो वापस जाने के लिए दबाएं , फिर मिटाएं -nऔर दबाएं Enter(या इसे -vउन सभी परिवर्तनों को आउटपुट करने के लिए बदलें जो इसे बनाता है)।

नोट : 17.04 से ऊपर के उबंटू संस्करण renameडिफ़ॉल्ट रूप से जहाज नहीं करते हैं , हालांकि यह अभी भी रिपॉजिटरी में उपलब्ध है। sudo apt install renameइसे स्थापित करने के लिए उपयोग करें


मेरे पास "गतिशील" प्रत्यय कैसे होगा। जैसे 001 - 010 आदि संभव?
Jiew मेंग

हम्म .. मैंने कुछ लिखने की कोशिश की लेकिन यह काम नहीं किया। ज्यादातर इसलिए, क्योंकि जब मैं 1 से 001 जोड़ता हूं, तो यह 2 से जुड़ता है, 002 से नहीं। अन्यथा, मैं केवल संख्या स्थिति को पकड़ने के लिए varaibles का उपयोग कर सकता हूं, फिर इसे जोड़ दें। इसके अलावा, मैं तो बस, याद इससे पहले कि मैं बारे में पता था rename: commmand, यह क्या मैं संलग्न करने के लिए किया थाfor f in *; do mv -v "$f" "prependThis$f"; done
मैट

2
@jiewmeng हाँ। (?:\.[0-9]{3})$अपने पैटर्न में उपयोग करें , यह एक निष्क्रिय समूह में सभी 3 अंकों की फाइल एक्सटेंशन से मेल खाएगा। उदाहरण: rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *। इस regex धोखा पत्रक पर एक नजर है ।
Sergio91pt

@ सर्जियोपॉट यह एक अच्छा रेगेक्स चीट शीट है। लेकिन यह किस बारे में है? नाशपाती होना चाहिए - लेकिन वहां ऐसा नोट नहीं मिल सकता है।
Adobe

@ Adobe "पर्ल आधारित रेगेक्स" के लिए यह एक सामान्य है। POSIX चरित्र वर्गों के बारे में + चिह्न और स्तंभ के बारे में नोट देखें।
18-08 को

21

पाइरेनेमर की कोशिश करें ।

यह नॉटिलस के साथ एकीकृत नहीं है, लेकिन यह काम पूरा कर लेता है। यहाँ एक समीक्षा है।

थुनर ( एक्सएफसीई का हिस्सा) का एक रेनमर भी है जिसे आप अलग से चला सकते हैं।

थूनर थोक रेनमर


2
थूनर कार्यक्षमता का उल्लेख करने के लिए धन्यवाद। यदि आपके पास थूनर है - फ़ोल्डर में फ़ाइलों का चयन करें और F2 दबाएं।
अधिकतम

9

लॉन्चपैड पर एक परियोजना लगती है जिसे नॉटिलस- रेनमर कहा जाता है । आप make installस्क्रिप्ट डाउनलोड करने और इसे अनटार करने के बाद इसे चलाकर इंस्टॉल कर सकते हैं । ऐसा लगता है कि कुछ कार्यशीलता है या यदि आप जानते हैं कि कुछ प्रोग्रामिंग हो सकती हैं तो आप इसे अपनी आवश्यकता के अनुसार बढ़ा सकते हैं क्योंकि यह सिर्फ एक स्क्रिप्ट है।

यहाँ छवि विवरण दर्ज करें


8

कमांड लाइन में, किसी एकल फ़ाइल का नाम बदलने के लिए कमांड बस है

mv file1.txt file2.txt

यदि आप इसे बैच में करना चाहते हैं, तो आप शायद इसे स्क्रिप्ट के माध्यम से करना चाहते हैं। यदि आप अधिक विवरण प्रदान करते हैं तो मैं या कोई और शायद आपके लिए एक कोड़ा मार सकता है। उस ने कहा, एक फ़ाइल के लिए सामान संलग्न करने के लिए एक स्क्रिप्ट इस तरह लग सकता है:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

इस बात पर निर्भर करते हुए कि आपको जिन चीज़ों का नाम बदलने की ज़रूरत है, वे संभवत: फिर से जुड़ जाएंगे, उदाहरण के लिए यदि आपके पास पालन करने के लिए विशिष्ट नामकरण नियम हैं। (व्यक्तिगत रूप से मैं इसे पर्ल स्क्रिप्ट के माध्यम से करूंगा क्योंकि मेरा बैश-फू इतना बढ़िया नहीं है, लेकिन यह सिर्फ मेरे लिए है।)

ध्यान दें कि मुझे पहले से पूछे गए प्रश्न से फ़ाइल नाम और विस्तार का अलगाव मिला ।


7

यदि आप इसे कमांड लाइन के बिना करना चाहते हैं, तो इसी तरह जो आप विंडोज में कर रहे हैं, टैब कुंजी के बजाय राइट एरो की का उपयोग करें । यह अगली फाइल का चयन करेगा जैसा कि विंडोज में टैब करता है।


यह समान नहीं है: आपको अभी भी नाम बदलने के लिए ENTER की आवश्यकता होगी, अगली फ़ाइल पर जाने के लिए तीर कुंजी, और F2 का नाम बदलने के लिए। जब आप किसी फ़ाइल का नाम बदल रहे हैं, तो TAB इसे 1 चरण में करता है।
MestreLion

@MestreLion लेकिन यह प्रश्न में वर्णित एल्गोरिदम के समान है और इसके लिए न तो किसी अतिरिक्त सॉफ्टवेयर की जरूरत है और न ही कमांड लाइन ऑपरेशन की। उपयोगकर्ता के अनुकूल होने की तरह।
राफेल सिलेक

सच है, आप एकमात्र उत्तर थे कि कम से कम मूल प्रश्न के समान दृष्टिकोण की कोशिश की। और दुखद सच यह है कि नॉटिलस की ऐसी कोई कार्यक्षमता नहीं है। आप F2 को नाम बदल सकते हैं, लेकिन यह thats। कोई TAB स्वचालित रूप से आपको पहले से ही नाम बदलने की विधि में अगली फ़ाइल में कूदने के लिए नहीं।
MestreLion

7

वास्तव में एक ही सवाल नहीं है कि एक साथ कई फ़ाइलों का नाम कैसे बदला जा सकता है? लेकिन मैं उसी कार्यक्रम का सुझाव देने जा रहा हूं जो मैंने उस उत्तर में सुझाया था: qmv

qmv renameutils पैकेज से एक उपयोगी उपकरण है। यह आपको फ़ाइलों का नाम बदलने के लिए अपने पसंदीदा पाठ संपादक का उपयोग करने में सक्षम बनाता है। विम की शक्ति के साथ संयुक्त, आपके पास एक उत्कृष्ट नामकरण उपयोगिता है।

मैं आमतौर पर इसे qmv -f doडायर की तरह आह्वान करता हूं जहां मैं फाइलों का एक गुच्छा बदलना चाहता हूं। या अगर मैं पुनरावर्ती नाम बदलना चाहता हूं qmv -R -f do

जब भी मुझे कई फ़ाइलों का नाम बदलने की आवश्यकता होती है, मैं हमेशा qmv (और विम) पर वापस आती हूं।

http://www.nongnu.org/renameutils/


मैंने सिर्फ आपके सुझाव के आधार पर यह कोशिश की। यदि आप विम का उपयोग करते हैं तो यह वास्तव में सबसे भयानक उपकरण है!
ste_kwr

3

यदि एकमात्र उपयुक्त विकल्प मैन्युअल रूप से फ़ाइलों का नाम बदल रहा है, तो ऐसा करने का एक शानदार तरीका vidir( moreutilsपैकेज में) उपयोग कर रहा है :

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.

उदाहरण


चुनिंदा फ़ाइलों का नाम बदलकर

वर्तमान कार्यशील निर्देशिका की सामग्री:

.
├── bar
├── baz
└── foo

चलाएं vidir, उन नामों में फ़ाइल नाम बदलें जिनमें आप नाम बदलना चाहते हैं; हिट CTRL+ Oऔर CTRL+ X:

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

फ़ाइल नाम स्विचिंग चुनिंदा रूप से

वर्तमान कार्यशील निर्देशिका की सामग्री:

.
├── bar
├── baz
└── foo

वर्तमान कार्यशील निर्देशिका की फ़ाइलों की सामग्री:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

भागो vidir, उन नंबरों को स्विच करें जिसमें उन फ़ाइलनामों को शामिल करें जिन्हें आप स्विच करना चाहते हैं; हिट CTRL+ Oऔर CTRL+ X:

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

चुनिंदा फ़ाइलों को हटाना

वर्तमान कार्यशील निर्देशिका की सामग्री:

.
├── bar
├── baz
└── foo

भागो vidir, फ़ाइलों को आप हटाना चाहते युक्त लाइनों को हटाने; हिट CTRL+ Oऔर CTRL+ X:

screenshot2

.
└── baz

2

मैं krename का उपयोग कर रहा हूं। यह एक GUI ऐप है। यह एमपी 3 टैग और इतने पर पढ़ सकता है।

यह एक अलग ऐप के साथ-साथ क्रूसर के एक भाग के रूप में मौजूद है।

एक renameस्क्रिप्ट भी है - जो मानक पर्ल स्थापना का एक हिस्सा है (आप शायद इसे स्थापित किया है)। इसके साथ जांच करें man rename

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.