私は、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つ)
答え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
詳細は: