저는 MacOS Big Sur에서 원하지 않는 특수 문자가 있는 일부 파일과 디렉터리의 이름을 반복적으로 바꾸는 zsh 스크립트를 작성하려고 합니다. 나는 며칠 동안 이 문제를 해결해 왔으며 문제를 해결했다고 생각할 때마다 새로운 문제에 직면하게 됩니다. 테스트 실행 모드에서 find 명령을 실행하는 경우를 제외하면 기본적으로 완료되었습니다.
find . -d -type f -execdir rename -n -X ${=CHARACTER_SUBSTITUTIONS} {} +
테스트 폴더에 올바른 파일 목록이 표시됩니다.
'제목 없는 파일3 [].txt'는 '제목 없는 파일3 --.txt' '제목 없는 파일2로 이름이 변경됩니다
. [].txt'는 '제목 없는 파일 2' - .txt'로 이름이 변경됩니다.
하지만 현실을 위해 실행하면 더 이상 찾을 수 없습니다.
find . -d -type f -execdir rename -X ${=CHARACTER_SUBSTITUTIONS} {} +
결과:
'제목 없는 파일 3 [].txt'의 이름을 '제목 없는 파일 3 --.txt'로 변경할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.
'제목 없는 파일 2'의 이름을 바꿀 수 없습니다. [].txt'를 '제목 없는 파일 2. --.txt': 해당 파일이나 디렉터리가 없습니다.
벽에 머리를 세게 박았습니다. 어떤 도움이라도 대단히 감사하겠습니다.
관련이 있는 경우 CHARACTER_SUBSTITUTIONS는 제가 만들고 싶은 대체 항목의 긴 목록일 뿐입니다.
echo ${=CHARACTER_SUBSTITUTIONS}
-S [ - -S ] - -S + - -S # - -S % - -S { - -S } - -S \ - -S < - -S > - -S * - -S ? - -S $ - -S ! - -S : - -S @ - -S ` - -S | - -S ' - -S " - -S & - -S - -S = -
세부 정보:
zsh
MacOS Big Sur
v1.601 이름 바꾸기(Perl 기반 변형 중 하나)
답변1
당신이 Zsh를 사용하고 있기 때문에 나는zmv
대신에 find
:
% autoload -Uz zmv
% zmv -n '(**/)(*)(#q.)' '$1${2//[^. [:IDENT:]]/-}' # -n: no execute
mv -- 'untitled file2 [].txt' 'untitled file2 --.txt'
mv -- 'untitled file3 [].txt' 'untitled file3 --.txt'
% zmv -v '(**/)(*)(#q.)' '$1${2//[^. [:IDENT:]]/-}' # -v: verbose
mv -- 'untitled file2 [].txt' 'untitled file2 --.txt'
mv -- 'untitled file3 [].txt' 'untitled file3 --.txt'
%
[^. [:IDENT:]]
무엇이든 일치아니요쉘 식별자의 점, 공백 또는 유효한 부분입니다. (#q.)
.-type f
자세한 내용은: