名前の共通部分に基づいてファイルをサブディレクトリに移動するには?
たとえば、という名前のファイルcomment_LastName.pdf
とwhere allと変更というサブディレクトリの場合、comment_LastName.md
ファイルをサブディレクトリに移動するにはどうすればよいですか? (ただし、すべてのファイル/ディレクトリに同時に適用されます)FirstName_LastName/
FirstName
LastName
comment_X.pdf
Mister_X/
これは失敗した試みzmv
でしたが、正しいコマンドがわかりませんでした...
zmv -n 'comment_(*).(pdf|md)' '*_$1/$f'
ベストアンサー1
$1
逆参照(たとえば、および)を導入すると、zmvのターゲットオペランドが参照されるように見えるため、$f
この場合ワイルドカードを追加することはできません。この問題を解決するために私が見つけた最良の方法は、対応するフラグを使用して-p
カスタムzmv
機能mv
を提供することです。
これが私が思いついたものです:
mv2 () {
local dir
dir=(*_$3:h)
mv $1 $2 $dir[1]/$3:t
}
zmv -p mv2 'comment_(*).(pdf|md)' '$1/$f'
関数でmv2
ファイルを配置するディレクトリ配列を作成します。次に、実際のmv
コマンドでファイル名をディレクトリ配列コンポーネントにタグ付けします。ファイルがまだ存在しないため、ターゲットディレクトリのワイルドカードを区別する必要があります。それ以外の場合、ワイルドカードは失敗します。