Bagaimana cara mengganti spasi putih dalam nama file?

8

saya mencobanya dengan cara berikut:

rename 'bla bla .txt' blabla.txt

Tapi ini tidak berhasil, apa sintaks yang benar untuk kasus ini?

NES
sumber

Jawaban:

15

Anda seharusnya tidak menggunakan renameuntuk mengganti nama hanya satu file, gunakan mv(1) sebagai gantinya.

Selanjutnya, untuk menghindari whitepsace, awali dengan \:

"Ubuntu One"Ubuntu\ One

Perintah Anda adalah

mv bla\ bla.txt blabla.txt
  • backslash memberitahu bash bahwa karakter selanjutnya entah bagaimana istimewa, misalnya \auntuk 'bel', \untuk ruang literal dan sebagainya

    lihat man ascii(7) untuk lebih lanjut

Atau, karena Anda sekarang menggunakan perintah yang benar mv, Anda dapat mengutip nama file jika ada banyak ruang:

mv "bla    bla.txt" blabla.txt

(Ini akan bla\ \ \ \ bla.txtdalam bentuk lolos)

  • Dalam bash, string yang dikutip (kutipan tunggal atau ganda) diperlakukan sebagai argumen tunggal, sedangkan string yang tidak dikutip akan dibagi menjadi beberapa argumen, seperti ini:

    • ["mv", "bla", "bla.txt", "blabla.txt", ]

    dan mvmengharapkan:

    • ["mv", "source", "destination", ]
  • Catatan: mengetik 'mv' dan beberapa karakter pertama dari nama file dan menekan TABakan memberi Anda versi lolos dari nama file, membuat penggantian nama cepat dan mudah.


renamedigunakan untuk memproses batch penamaan ulang file menggunakan ekspresi reguler, seperti yang ditunjukkan dalam contoh dari halaman manualnya :

rename 's/\.bak$//' *.bak

Untuk menghapus setiap kejadian .bak (di akhir string [$]) dari semua file yang cocok dengan "* .bak".

Stefano Palazzo
sumber
terima kasih, bagaimana akan melihat perintah jika ada banyak spasi putih dalam nama file asal? apakah ada regex sederhana sehingga tidak perlu keluar dari setiap spasi putih?
NES
Memperbarui jawaban untuk mengatasi banyak spasi dan kutip ganda. V.
Stefano Palazzo
Ada perbedaan antara tanda kutip tunggal dan ganda, tetapi tidak ada masalah untuk masalah ini. Lihat artikel ini untuk rincian persisnya
Stefano Palazzo
4

rename adalah perintah khusus untuk penggantian nama massal. Secara tidak sengaja, apa yang biasanya kita sebut "penggantian nama" sebenarnya adalah "perpindahan" ke nama baru:

mv 'bla bla .txt' blabla.txt
ændrük
sumber
apa perbedaan antara menulis nama file dalam tanda kutip tunggal dan tanda kutip ganda?
NES
4
Kutipan ganda memungkinkan variabel untuk diperluas dan untuk substitusi proses; Kutipan tunggal tidak. A=bla ; mv "$A $A .txt" blabla.txtakan memindahkan bla bla .txt, tetapi A=bla ; mv '$A $A .txt' blabla.txtakan mencari file yang sebenarnya bernama "$ A $ A .txt". Salah satu akan bekerja untuk contoh Anda.
frabjous
1
rename "s/\s//g" "bla bla.txt"

s adalah perintah sed Substitute.

Adalah untuk whiteSpace

Anda mengganti tanpa apa-apa. String pengganti lain berjalan setelah garis miring kedua.

g adalah untuk Global, yaitu mengganti setiap instance. Menghilangkan g hanya menggantikan instance pertama.


Perintah ini akan menggantikan spasi putih dengan garis bawah di semua file:

rename "s/\s/_/g" *
Nissim Nanach
sumber