이 스레드(https://superuser.com/questions/659876/how-to-rename-files-and-replace-characters)은 풍부한 것으로 입증되었으며 파일 이름에서 문자의 첫 번째 인스턴스를 바꿔야 한다는 점을 제외하고는 필요한 작업을 수행합니다.
어떻게 해야 하나요?
for f in *:*; do mv -v "$f" $(echo "$f" | tr '.' '_'); done
.
다음과 같이 filename 의 첫 번째 인스턴스만 바꿉니다 .
2022-10-07T071101.8495077Z_QueryHistory.txt
답변1
불행하게도 시도하고 있는 방법은 필요한 것보다 더 복잡하고 취약합니다(파일 이름에 특정 특수 문자가 포함된 경우 충돌이 발생함). 이는 다음을 기반으로 하는 더 간단한 접근 방식입니다.매개변수 확장변환 파일 이름:
for f in *; do mv -v -- "$f" "${f/./_}"; done # replace the first .
for f in *; do mv -v -- "$f" "${f//./_}"; done # replace every .
이를 위해서는 쉘로 bash, ksh 또는 zsh가 필요합니다. dash(Ubuntu의 , 스크립팅에 자주 사용되지만 대화식으로 거의 사용되지 않음)와 같은 다른 쉘에는 매개변수 확장 형식이 /bin/sh
없습니다 .${VARIABLE/PATTERN/REPLACEMENT}
prename
또는 ( )를 사용할 수 있습니다 apt install rename
.
rename 's/\./_/' * # replace the first .
rename 's/\./_/g' * # replace every .
또는 다음을 사용할 수 있습니다.다루기 힘든~의즈마브:
autoload -U zmv # put this in your .zshrc
zmv '*' '${f/./_}' # replace the first .
zmv -W '*.*.*' '*_*.*' # replace the next-to-last .
zmv '*' '${f//./_}' # replace every .
내 대답의 모든 조각은 이름이 점으로 시작하는 파일을 건너뜁니다.
답변2
사용펄 rename
명령줄:
rename -n 's/\./_/' ./2022-10-07T071101.8495077Z_QueryHistory.txt
출력이 만족스러우면 제거하십시오 -n
(일명).dry-run