複雑な正規表現パターンを開発するのではなく、パイプラインでfindを使用してからgrep -vを使用してファイルをフィルタリングする方がはるかに簡単です。しかし、次のようにzmvにパイプを接続すると:
find | grep -v TFLM | zmv "(*)" "TFLM \$1"
入力を無視し、引き続きすべてのファイルに変換を適用します。パイプ入力を使用するように指示する方法はありますか?フィルタリングされたファイルを移動してzmvを使用できるようですが、実際には解決策ではありません。
ベストアンサー1
zmv
標準入力からは読まないでください。
find
with heremv
またはzmv
filename glob を使用できますが、zsh
どちらも使用できず、grep
まったく扱いません。grep
ファイル名(挿入された改行文字を含めることができます)ではなく、改行テキストを使用する必要があります。
ファイル名globの使用(現在のディレクトリでのみ機能し、非表示ではないファイルでのみ機能):
zmv '^TFLM *' 'TFLM $f'
次のように隠しファイルと隠しディレクトリのファイルを含むディレクトリの名前を変更せずに繰り返しますfind
。
zmv '(**/)(^TFLM *)(#qD^/)' '${1}TFLM $2'
使用してくださいfind
(ただし、競合処理がないため、安全オプションzmv
を追加してください-i
):
find . ! -type d ! -name 'TFLM *' -exec sh -c '
for pathname do
mv -i "$pathname" "${pathname%/*}/TFLM ${pathname##*/}"
done' sh {} +
場所bash
(隠しファイルを除いて現在のディレクトリにのみ適用):
shopt -s extglob
for name in !(TFLM *); do
mv -i -- "$name" "TFLM $name"
done
または、bash
Perlrename
ユーティリティを使用してください。
shopt -s extglob
rename 's|/|/TFLM |' ./!(TFLM *)
(そうでない場合は、./
ファイル名がで始まると一部のバリエーションが失敗します-
。すべてのバリアントが--
タグオプションendをサポートしているわけではありません)。