लिनक्स - फाइल नामों में रिक्त स्थान की जगह


96

मेरे पास एक फ़ोल्डर में बहुत सी फाइलें हैं, और मैं हर फ़ाइल नामों में हर अंतरिक्ष चरित्र को अंडरस्कोर के साथ बदलना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


172

यह करना चाहिए:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

यह मेरे लिए काम नहीं किया। यह दावा किया गया है कि समान फाइलें मौजूद हैं (गलत फाइलनाम के साथ)। उदा नाम बदलने की कोशिश कर रहा है 1 - foo.jpgऔर मेरे फ़ोल्डर में पहले से ही था 1.jpg
बक्सर

3
मुझे लगता है कि जब वे उद्धरण के पास होते हैं तो मुझे पढ़ने में थोड़ी मुश्किल होती है। वही लेकिन अधिक पठनीय होगाfor file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
कामिल एस जेरोन

नोट: यह उन निर्देशिका से चलाया जाता है जिनकी फ़ाइलों के नाम आप अद्यतन करना चाहते हैं। वैकल्पिक रूप से, आप बदल सकते हैं *करने के लिए PATH_TO_YOUR_DIRECTORY
20

72

मैं 'नाम बदलें' आदेश का उपयोग करना पसंद करता हूं, जो पर्ल-स्टाइल रेगीक्स लेता है:

rename "s/ /_/g" *

आप -n ध्वज के साथ सूखा रन कर सकते हैं:

rename -n "s/ /_/g" *

3
यह काम करेगा यदि आपके पास पर्ल-स्टाइल का नाम है और सरल रेडहैट / फेडोरा एक नहीं है
डेविड डीन

9
फ़ेडोरा संस्करण होगाrename " " "_" *
डेविड डीन

4
renameOSX में उपलब्ध नहीं है यह प्रकट होता है।
एटिएन लो-डेकेरी

MacOS 10.12.3 पर, renameउपलब्ध है।
सुंग चो

1
@DavidDean आर्क लिनक्स पर नाम केवल पहली घटना को प्रतिस्थापित करेगा (कई स्थानों के साथ फ़ाइलों / निर्देशिकाओं के लिए बहुत सुविधाजनक नहीं)। यह फेडोरा एक के रूप में एक ही वाक्यविन्यास है, इसलिए मुझे संदेह है कि वे एक ही हो सकते हैं। लेकिन पर्ल-नाम बदला जा सकता है।
प्रोटोसिटोस

15

श का उपयोग करें ...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

यदि आप ट्रिगर को खींचने से पहले इसे आज़माना चाहते हैं तो बस बदल mvदें echo mv


4

यदि आप बैश का उपयोग करते हैं:

for file in *; do mv "$file" ${file// /_}; done

जब मैंने कोशिश की, मुझे mv मिला: जब कई फाइलें चलती हैं, तो अंतिम तर्क mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try के लिए अधिक जानकारी के लिए एक निर्देशिका Try mv --help होना चाहिए ।
मिथुन श्रीधरन

पुन: त्रुटि mv: गुम फ़ाइल तर्क mv --help' for more information. mv: missing file argument Try अधिक जानकारी के लिए mv --help ' आज़माएं । mv: गुम फ़ाइल तर्क mv --help' for more information. mv: missing file argument Try अधिक जानकारी के लिए mv --help ' आज़माएँ ।
मिथुन श्रीधरन

@ levislevis85: Thx, यह नहीं जानता था।
आत्माओं का स्वर्गवास

4

क्या होगा यदि आप प्रतिस्थापित कार्य को पुनरावर्ती रूप से लागू करना चाहते हैं ? आप वह कैसे करेंगें?

खैर, मुझे सिर्फ इसका जवाब मिला। सबसे सुरुचिपूर्ण समाधान नहीं है, (उन फ़ाइलों का नाम बदलने की कोशिश करता है जो शर्त का पालन नहीं करते हैं) लेकिन यह काम करता है। (BTW, मेरे मामले में मुझे '% 20' के साथ फाइलों का नाम बदलने की ज़रूरत थी, अंडरस्कोर के साथ नहीं)

#!/bin/bash
find . -type d | while read N
do
     (
           cd "$N"
           if test "$?" = "0"
           then
               for file in *; do mv "$file" ${file// /%20}; done
           fi
     )
done

2

कुछ इस तरह से प्रयास करें, मान लें कि आपकी सभी फाइलें .txt की हैं:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

2
निम्न त्रुटि tr मिली: mv का अनुवाद करते समय दो तार दिए जाने चाहिए: अधिक जानकारी के लिए अनुपलब्ध फ़ाइल तर्क कोशिश करें `mv --help '।
मिथुन श्रीधरन

2
Agin त्रुटि tr: बहुत अधिक तर्क tr --help' for more information. mv: missing file argument Try अधिक जानकारी के लिए mv --help ' आज़माएँ ।
मिथुन श्रीधरन

2

यहाँ एक और उपाय है:

ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
  1. फ़ाइल के नाम के आसपास उद्धरण जोड़ने के लिए awk का उपयोग करता है
  2. अंडरस्कोर के साथ अंतरिक्ष को बदलने के लिए sed का उपयोग करता है; उद्धरण के साथ मूल नाम प्रिंट करता है (awk से); फिर प्रतिस्थापित नाम
  3. xargs एक बार में 2 लाइनें लेता है और इसे mv में पास करता है

1

अपने चर बोलो:

for file in *; do echo mv "'$file'" "${file// /_}"; done

वास्तविक नाम करने के लिए "प्रतिध्वनि" निकालें।


यह mv कमांडों को तीव्र रूप से गूँज रहा है, लेकिन वास्तव में फ़ाइल का नाम नहीं बदल रहा है!
मिथुन श्रीधरन

इको हटाने से mv जैसी त्रुटि उत्पन्न होती है: \'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat \ _ '1130_1_bedroom_floor_plan.jpg \' नहीं कर सकता : 'ऐसी कोई फ़ाइल या निर्देशिका mv: \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat ' स्टेट नहीं कर सकता: '1130_diningroom_table.jpg' '': ऐसी कोई फ़ाइल या निर्देशिका नहीं है
मिथुन श्रीधरन

लिनक्स लिनक्स 2.6.9-42.0.3.EL.wh1smp # 1 एसएमपी शुक्र 14 अगस्त 15:48:17 एमडीटी 2009 i686 i686 i386 GNU / लिनक्स
मिथुन श्रीधरन

1

एक स्ट्रिंग (आपके मामले में अंतरिक्ष चरित्र) को बदलने के लिए सबसे आसान तरीका एक और स्ट्रिंग Linuxका उपयोग कर रहा है sed। आप इसे निम्नानुसार कर सकते हैं

sed -i 's/\s/_/g' *

उम्मीद है की यह मदद करेगा।


यह प्रश्न को संबोधित नहीं करता है।
अमित

0

मेरा मानना ​​है कि आपका उत्तर अंडरस्कोर के साथ फ़ाइलनामों में स्थान बदलें


1
हालांकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को यहां शामिल करना बेहतर होगा , और संदर्भ के लिए लिंक प्रदान करें।
छिपकली का बिल

0

.pyएक्सटेंशन उपयोग के साथ सभी फ़ाइलों का नाम बदलने के लिए, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

नमूना उत्पादन,

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.