Salin dan ganti nama secara rekursif untuk mengganti spasi dengan garis bawah

0

Saya memiliki direktori dengan 400 sub-direktori yang masing-masing berisi beberapa ratus file, banyak dengan nama file yang berisi spasi. Saya perlu menyalin semua file dengan spasi di nama file, menghasilkan dua salinan file-file itu, satu dengan spasi dan satu dengan garis bawah menggantikan spasi. Saya melihat banyak kode yang mendekati, tetapi tidak ada yang akan menyalin, mengganti nama, dan mengganti spasi secara rekursif. Ada saran ??? Terima kasih .... RW Linux mengganti nama menggunakan parameter dan spasi? Linux mengganti nama menggunakan parameter dan spasi?

pengguna2693196
sumber

Jawaban:

1

Namun itu tidak terlalu sulit:

 for i in "$(find . -type f -name '* *' -print)"; do cp "$i" $(echo $i | sed 's/ /_/g'); done

Ini mengasumsikan nama direktori Anda tidak mengandung spasi. Jika ya, skrip bash berikut akan berfungsi:

  #!/bin/bash

 TGT=/path/to/targt/directory
 LIST="$(find $TGT -type f -name '* *' -print)"
 for i in $LIST; do 
      dirpath=${i%/*}
      base=base=${i##*/}
      newbase=$(echo "base" | sed 's/ /_/g')
      cp "$i" $dirpath/$newbase
 done

Jika nama direktori Anda berisi spasi, dan Anda ingin yang dibubarkan, Anda harus menentukan lebih baik apa yang ingin Anda duplikasi: file asli dan yang baru, hanya yang baru, kemungkinan file lain tanpa spasi ...

MariusMatutiae
sumber
Terima kasih .... Nama direktori tidak mengandung spasi.
user2693196
@ user2693196 jika berfungsi, Anda harus menerima jawaban saya, sehingga pengguna dengan masalah serupa yang mencari solusi dapat menemukannya dan didorong untuk menggunakannya. Keduanya menghasilkan respons yang lebih cepat, dan mencegah pengiriman tulisan baru yang tidak berguna.
MariusMatutiae