zsh/zmv を使用したパターンに基づくファイルの移動

zsh/zmv を使用したパターンに基づくファイルの移動

名前の共通部分に基づいてファイルをサブディレクトリに移動するには?

たとえば、という名前のファイルcomment_LastName.pdfとwhere allと変更というサブディレクトリの場合、comment_LastName.mdファイルをサブディレクトリに移動するにはどうすればよいですか? (ただし、すべてのファイル/ディレクトリに同時に適用されます)FirstName_LastName/FirstNameLastNamecomment_X.pdfMister_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コマンドでファイル名をディレクトリ配列コンポーネントにタグ付けします。ファイルがまだ存在しないため、ターゲットディレクトリのワイルドカードを区別する必要があります。それ以外の場合、ワイルドカードは失敗します。

おすすめ記事