Tr

轉義 tr -dc 中的點字元

  • December 30, 2016

我正在嘗試使用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

只需在“允許的字元”集中添加點。還要添加/字元(路徑的一部分)。

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'

引用自:https://unix.stackexchange.com/questions/333815