zmv: 파일 이름에서 큰따옴표(")를 바꿉니다.

zmv: 파일 이름에서 큰따옴표(")를 바꿉니다.

macOS에서 zmv를 사용하여 파일 이름의 큰따옴표(")를 밑줄(_)로 바꾸고 싶습니다. 그러나 zshexpn을 사용하여 "를 적절하게 분리할 수 없습니다. 사용해야 하는 마법의 zsh/zmv/zshexpn 옵션이 있습니까?

% zmv -n '(**/)(*)' '$1${(S)2//"/_}'
zmv: syntax error in replacement
% zmv -n '(**/)(*)' '$1${(S)2//\"/_}'
zmv: syntax error in replacement`
% zmv -n '(**/)(*)' '$1${(Sp)2//\"/_}'
zmv: syntax error in replacement

(이것은 불법 문자를 대체하기 위한 대규모 캠페인의 일부입니다. 모든 작업을 수행하기 위해 zmv 표현식을 사용하고 싶습니다.)

도움을 주셔서 감사합니다.

답변1

두 번째 표현식을 정확하게 처리하는 방법을 모르지만 zmv변수를 사용하여 따옴표를 포함하는 것이 작동하는 것 같습니다.

quote='"'
zmv -n '(**/)(*)' '$1${2//$quote/_}'

예:

% find
.
./bar
./bar/Hello, "World".

% zmv -n '(**/)(*)' '$1${2//$quote/_}'
mv -- 'bar/Hello, "World".' 'bar/Hello, _World_.'

답변2

내 테스트에서는 zmv '* *' '$f:gs/"/_'훌륭하게 작동합니다 .

https://zsh.sourceforge.io/Intro/intro_2.html매우파일 와일드카드에 대한 무미건조한 설명입니다. 정규식과 동일하지는 않지만 혼란스러울 정도로 가깝습니다.

답변3

이것은 구문 분석 오류입니다...함수를 편집 하고 zmvStéphane이 언급한 2> /dev/null다음 항목을 제거하면g=${(Xe)repl}여기추가 오류 메시지가 나타납니다.

zmv:257: parse error
zmv: syntax error in replacement

zsh나는 다음이 잘 작동하기 때문에 닫는 큰따옴표를 기대하여 구문 분석 오류가 발생했다고 추측합니다 .

zmv -n '(**/)(*)' '$1${2//"\""/_}'

관련 정보