GNU/Linux >> Belajar Linux >  >> Linux

Cara mengganti spasi pada nama file menggunakan skrip bash

Anda dapat menggunakan detox oleh Doug Harple

detox -r <folder>

Gunakan rename (alias prename ) yang merupakan skrip Perl yang mungkin sudah ada di sistem Anda. Lakukan dalam dua langkah:

find . -name "* *" -type d | rename 's/ /_/g'    # do the directories first
find . -name "* *" -type f | rename 's/ /_/g'

Berdasarkan Jürgen menjawab dan mampu menangani banyak lapisan file dan direktori dalam satu ikatan menggunakan versi "Revisi 1.5 1998/12/18 16:16:31 rmb1" dari /usr/bin/rename (skrip Perl):

find /tmp/ -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;

Saya menggunakan:

for f in *\ *; do mv "$f" "${f// /_}"; done

Meskipun tidak rekursif, ini cukup cepat dan sederhana. Saya yakin seseorang di sini dapat memperbaruinya menjadi rekursif.

${f// /_} bagian menggunakan mekanisme ekspansi parameter bash untuk mengganti pola dalam parameter dengan string yang disediakan. Sintaks yang relevan adalah ${parameter/pattern/string} . Lihat:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html atau http://wiki.bash-hackers.org/syntax/pe .


find . -depth -name '* *' \
| while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done

gagal melakukannya dengan benar pada awalnya, karena saya tidak memikirkan direktori.


Linux
  1. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  2. Bagaimana Mengganti Nama File di Linux?

  3. Linux - Mengganti spasi pada nama file

  1. Bagaimana cara menulis integer ke file biner menggunakan Bash?

  2. Cara memasukkan file dalam skrip bash shell

  3. Menggunakan garis bawah dalam nama file?

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Cara membuat perintah alias berfungsi di skrip bash atau file bashrc

  3. Bagaimana saya tahu nama file skrip dalam skrip Bash?