Bir klasörde çok sayıda dosyam var ve tüm dosya adlarındaki her boşluk karakterini altçizgilerle değiştirmek istiyorum. Bunu nasıl başarabilirim?
Bir klasörde çok sayıda dosyam var ve tüm dosya adlarındaki her boşluk karakterini altçizgilerle değiştirmek istiyorum. Bunu nasıl başarabilirim?
Yanıtlar:
Bunu yapmalı:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*için PATH_TO_YOUR_DIRECTORY.
Perl tarzı normal ifadeleri alan 'yeniden adlandır' komutunu kullanmayı tercih ederim:
rename "s/ /_/g" *
-N bayrağıyla prova yapabilirsiniz:
rename -n "s/ /_/g" *
rename " " "_" *
renameOSX'te mevcut değil görünür.
renamemevcuttur.
Sh kullanın ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Eğer tetiği çekmeden önce bu out denemek isterseniz sadece değiştirmek mviçin echo mv.
Bash kullanıyorsanız:
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 Daha fazla bilgi için mv --help'i deneyin .
mv --help' for more information. mv: missing file argument Try fazla bilgi için mv --help'i deneyin . mv: eksik dosya bağımsız değişkeni Daha mv --help' for more information. mv: missing file argument Try fazla bilgi için mv --help'i deneyin .
Ya değiştirme görevini uygulamak isterseniz yinelemeli ? Bunu nasıl yaptın?
Cevabı az önce kendim buldum. En zarif çözüm değil (koşula uymayan dosyaları da yeniden adlandırmaya çalışıyor) ama işe yarıyor. (BTW, benim durumumda dosyaları alt çizgiyle değil '% 20' ile yeniden adlandırmam gerekiyordu)
#!/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
İşte başka bir çözüm:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Tüm dosyalarınızın .txt olduğunu varsayarak şuna benzer bir şey deneyin:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try fazla bilgi için mv --help'i deneyin .
Değişkenlerinizi alıntılayın:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Gerçek yeniden adlandırmayı yapmak için "yankı" yı kaldırın.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat echo'nun kaldırılması mv gibi hatalar üretir: \ '1130_1_bedroom_floor_plan.jpg \' ': Böyle bir dosya veya dizin yok mv: \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat \' 1130_diningroom_table.jpg \ '': Böyle bir dosya veya dizin yok
Bir dizeyi (sizin durumunuzda boşluk karakteri) başka bir dizeyle değiştirmenin en kolay yolu Linuxkullanmaktır sed. Aşağıdaki gibi yapabilirsiniz
sed -i 's/\s/_/g' *
Bu yardımcı olur umarım.
Cevabınızın Dosya adlarındaki boşlukları alt çizgilerle değiştir bölümünde olduğuna inanıyorum .
Bir .pyuzantı ile tüm dosyaları yeniden adlandırmak için,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Örnek çıktı,
$ 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.jpgve klasörüm zaten içinde vardı1.jpg.