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'

관련 정보