tr
次のコマンドを使用しようとします。
for file in ./*; do mv -v "$file" $(echo "$file" | tr ' []' '-' | tr -dc 'A-Za-z0-9_-' | tr '[:upper:]' '[:lower:]'); done
ただし、このコマンドはドット文字も削除します。したがって、このファイルは次のようになります。
北東城ニコラス教会[1235] 1936-08-01.jpg
~になる
聖ニコラス教会--1235--1936-08-01jpg
tr -dc 'A-Za-z0-9\._-'
私はドットを脱出するためにやを使用するなど、さまざまな方法を試しました。tr -dc "A-Za-z0-9\._-"
その結果、常にすべての文字が削除されます。私の質問は、でドット文字をどのように適切にエスケープできるかということですtr -dc
。
答え1
「許可される文字」セットに点を追加するだけです。また、/
文字(パスの一部)を追加します。
for f in ./*; do
new_f="$( printf "%s" "$f" | tr ' []' '-' | tr -dc 'A-Za-z0-9_./-' | tr '[:upper:]' '[:lower:]')"
printf "Would move '%s' to '%s'\n" "$f" "$new_f"
done
これにより
Would move './St Nicholas' church from NE [1235] 1936-08-01.jpg' to './st-nicholas-church-from-ne--1235--1936-08-01.jpg'