转义 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'

相关内容