tr -dcでドット文字をエスケープします。

tr -dcでドット文字をエスケープします。

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'

関連情報