Tr
轉義 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
?
只需在“允許的字元”集中添加點。還要添加
/
字元(路徑的一部分)。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'