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



コメント