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

2番目の式を正確に処理する方法がわかりませんが、zmv変数を使用して引用符を含めるとうまくいくようです。

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

例:

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

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

おすすめ記事