我正在尝试使用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'