파일 이름의 일부로 세미콜론이 포함된 파일의 이름을 어떻게 바꿀 수 있습니까?

파일 이름의 일부로 세미콜론이 포함된 파일의 이름을 어떻게 바꿀 수 있습니까?

확장자가 "XLS;1"인 모든 파일의 이름을 "XLS"로 바꾸려고 했지만 작동하지 않았습니다.

Windows XP의 cygwin에서 다음 방법을 시도했지만 작동하지 않습니다.

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS

답변1

문제는 세미콜론에 있는 것이 아니며 두 번째 예에서 문제가 해결되었습니다. 문제는 Linux/Unix 유틸리티(및 확장 Cygwin)가 Windows에서 이해하는 것처럼 이 명령을 "다음으로 끝나는 모든 파일 이동"으로 처리하지 않는다는 것입니다 .XLS;1. .XLS각 파일을 개별적으로 이동해야 합니다.

for file in *.XLS\;1; do 
    mv "$file" "${file%;1}"
done

설명:

이렇게 하면 으로 끝나는 모든 파일을 가져와서 .XLS;1한 번에 하나씩 이름이 지정된 변수에 저장합니다 $file. 각 파일에 대해 파일을 잘라서 $file현재 위치로 이동하라고 지시합니다 .;1$file

참고: zsh를 사용하는 경우 다음과 같은 훌륭한 유틸리티가 있습니다 zmv.

zmv '(*).XLS;1" "$1.XLS"

설정에 따라 이를 먼저 실행해야 할 수도 있습니다 autoload zmv(.zshrc에도 입력).

답변2

인덱스 노드를 통해 이동할 수 있습니다.

인덱스 노드 찾기

ls -i 

방금 찾은 inode를 사용하세요.

find . -inum <you just found> -exec mv {} <new name> \;

이는 UNIX 시스템에서 작동합니다. Cygwin에 대해 아무것도 모릅니다.

답변3

시그윈은유틸리티Linux패키지에는 다음이 포함됩니다 rename:

rename ".XLS;1" ".XLS" *.XLS\;1

또는 파일 이름에 다른 세미콜론이 없으면 다음과 같이 충분합니다.

rename ";1" "" *.XLS\;1

관련 정보