Saya menamai sejumlah file dengan spasi di dalamnya, dan saya ingin mengganti spasi dengan _
. Namun, setiap kali saya menulis perintah di shell dengan nama file (misalnya Spring 2011
), shell tidak mengenali file atau direktori.
Apa yang bisa saya lakukan? Apakah ada cara untuk menggunakan karakter unicode untuk spasi?
bash
for loop: lihat solusi saya di sini .Jawaban:
Melarikan diri dari ruang, misalnya
Spring\ 2011
, atau menggunakan tanda kutip, misalnya'Spring 2011'
. Di masa depan, biasanya ide buruk untuk menggunakan nama file dengan spasi di dalamnya pada * NIX apa pun.Jika sudah
rename
, Anda dapat menggunakan ini:sumber
rename
versi 2.23)Jika mesin Anda memiliki perintah rename , maka ini akan mengubah semua spasi untuk menggarisbawahi semua file / direktori di direktori kerja saat ini:
sumber
rename --version
rename from util-linux 2.23.2
.Jika Anda tidak memiliki
rename
atau lebih suka menggunakan shell saja:Rusak:
*\ *
memilih semua file dengan spasi di namanya sebagai input untukfor
loop."$f"
penting karena kita tahu ada spasi dalam nama file dan jika tidak, akan muncul argumen 2+mv
.${f//str/new_str}
adalah fitur substitusi string khusus-bash. Semua contohstr
diganti dengannew_str
.sumber
for f in *\ *; do mv "$f" "${f// /_}"; done
berfungsimv "Spring 2011.file" Spring_2011.file
harus memberi tahu command-line untuk mengambil string yang dikutip sebagai input tunggal.sumber
Untuk secara terprogram mengganti nama file N, Anda dapat menggunakan
bash
loop sederhana .Jika Anda memiliki kurang dari 5 nama file, maka Anda dapat secara manual mengetikkan semua nama file dan menggunakan
rename
perintah seperti yang disarankan oleh solusi di atas . Tetapi bagi saya ... Saya lebih suka solusi terprogram ... bahkan ketika hanya ada 4 file.ps
jika Anda tidak terbiasa dengan
Bash
Ekspansi Parameter (yaitu${filename// /_}
), Anda dapat menggunakanrename
perintah:sumber