확장자가 "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