ディレクトリ内にある、空白のファイル名を変換する

任意のディレクトリにある、空白を含むファイル名をアンスコ(_)やハイフン(-)に変換する方法ですが、ネットでは以下のワンライナーの方法がありました

find . -name "* *" | rename 's/ /_/g'

CentOS 9では、その方法で試しましたが下記のエラーとなりました

$ find . -name "* *" | rename 's/ /_/g'
rename: not enough arguments
Try 'rename --help' for more information.

ワンライナーの変換方法の記事は2010年代の記事で古いのでrenameコマンドの書式がかわったいてCentOS9では駄目っぽいので、findの結果をmvコマンドでファイル名を変換する方法ならうまくいきました

$ find . -name "* *" -exec bash -c 'mv "$0" "${0// /_}"' {} \;

また、ワンライナーではなくて、シェルスクリプト内で書くなら下記の書き方で変換できます

# 空白を"_"に置換してリネーム
IMG_DIR="/home/admin/img/"

find ${IMG_DIR} -depth -name "* *" | while read -r file; do
  newname=$(echo "$file" | tr ' ' '_')
  mv "$file" "$newname"
done

 

LinuxCentOS 9,CentOS Stream 9

Posted by admin