Saya memiliki sejumlah file dalam sebuah folder, dan saya ingin mengganti setiap karakter spasi di semua nama file dengan garis bawah. Bagaimana saya bisa mencapai ini?
Saya memiliki sejumlah file dalam sebuah folder, dan saya ingin mengganti setiap karakter spasi di semua nama file dengan garis bawah. Bagaimana saya bisa mencapai ini?
Jawaban:
Ini harus melakukannya:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
ke PATH_TO_YOUR_DIRECTORY
.
Saya lebih suka menggunakan perintah 'rename', yang menggunakan regexes gaya Perl:
rename "s/ /_/g" *
Anda dapat melakukan uji coba dengan bendera -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
tidak tersedia di OSX itu muncul.
rename
tersedia.
Gunakan sh ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Jika Anda ingin mencobanya sebelum menarik pelatuk, ganti saja mv
ke echo mv
.
Jika Anda menggunakan bash:
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
mv - help 'untuk informasi lebih lanjut.
mv --help' for more information. mv: missing file argument Try
mv --help 'untuk informasi lebih lanjut. mv: argumen file hilang Coba mv --help' for more information. mv: missing file argument Try
mv --help 'untuk informasi lebih lanjut.
Bagaimana jika Anda ingin menerapkan tugas ganti secara rekursif ? Bagaimana Anda melakukannya?
Nah, saya sendiri baru menemukan jawabannya. Bukan solusi paling elegan, (juga mencoba mengganti nama file yang tidak sesuai dengan kondisi) tapi berhasil. (BTW, dalam kasus saya, saya perlu mengganti nama file dengan '% 20', bukan dengan garis bawah)
#!/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
Coba sesuatu seperti ini, dengan asumsi semua file Anda adalah .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
mv --help 'untuk informasi lebih lanjut.
Ini solusi lainnya:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Kutip variabel Anda:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Hapus "echo" untuk melakukan rename yang sebenarnya.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': Tidak ada file atau direktori mv: tidak bisa stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': Tidak ada file atau direktori seperti itu
Cara termudah untuk mengganti string (karakter spasi dalam kasus Anda) dengan string lain dalam Linux
menggunakan sed
. Anda bisa melakukannya sebagai berikut
sed -i 's/\s/_/g' *
Semoga ini membantu.
Saya yakin jawaban Anda ada di Ganti spasi di nama file dengan garis bawah .
Untuk mengganti nama semua file dengan .py
penggunaan ekstensi,
find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
Output sampel,
$ 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
dan folder saya sudah ada1.jpg
di dalamnya.