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'