मेरे पास एक फ़ोल्डर में बहुत सी फाइलें हैं, और मैं हर फ़ाइल नामों में हर अंतरिक्ष चरित्र को अंडरस्कोर के साथ बदलना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?
मेरे पास एक फ़ोल्डर में बहुत सी फाइलें हैं, और मैं हर फ़ाइल नामों में हर अंतरिक्ष चरित्र को अंडरस्कोर के साथ बदलना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?
जवाबों:
यह करना चाहिए:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
करने के लिए PATH_TO_YOUR_DIRECTORY
।
मैं 'नाम बदलें' आदेश का उपयोग करना पसंद करता हूं, जो पर्ल-स्टाइल रेगीक्स लेता है:
rename "s/ /_/g" *
आप -n ध्वज के साथ सूखा रन कर सकते हैं:
rename -n "s/ /_/g" *
rename " " "_" *
rename
OSX में उपलब्ध नहीं है यह प्रकट होता है।
rename
उपलब्ध है।
श का उपयोग करें ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
यदि आप ट्रिगर को खींचने से पहले इसे आज़माना चाहते हैं तो बस बदल mv
दें echo mv
।
यदि आप बैश का उपयोग करते हैं:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
के लिए अधिक जानकारी के लिए एक निर्देशिका Try mv --help होना चाहिए ।
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 ' आज़माएँ ।
क्या होगा यदि आप प्रतिस्थापित कार्य को पुनरावर्ती रूप से लागू करना चाहते हैं ? आप वह कैसे करेंगें?
खैर, मुझे सिर्फ इसका जवाब मिला। सबसे सुरुचिपूर्ण समाधान नहीं है, (उन फ़ाइलों का नाम बदलने की कोशिश करता है जो शर्त का पालन नहीं करते हैं) लेकिन यह काम करता है। (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
कुछ इस तरह से प्रयास करें, मान लें कि आपकी सभी फाइलें .txt की हैं:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
अधिक जानकारी के लिए mv --help ' आज़माएँ ।
यहाँ एक और उपाय है:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
अपने चर बोलो:
for file in *; do echo mv "'$file'" "${file// /_}"; done
वास्तविक नाम करने के लिए "प्रतिध्वनि" निकालें।
\'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' '': ऐसी कोई फ़ाइल या निर्देशिका नहीं है
एक स्ट्रिंग (आपके मामले में अंतरिक्ष चरित्र) को बदलने के लिए सबसे आसान तरीका एक और स्ट्रिंग Linux
का उपयोग कर रहा है sed
। आप इसे निम्नानुसार कर सकते हैं
sed -i 's/\s/_/g' *
उम्मीद है की यह मदद करेगा।
मेरा मानना है कि आपका उत्तर अंडरस्कोर के साथ फ़ाइलनामों में स्थान बदलें ।
.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
1 - foo.jpg
और मेरे फ़ोल्डर में पहले से ही था1.jpg
।