Bash - 番号付きフォルダonelinerにファイルを移動する

Bash - 番号付きフォルダonelinerにファイルを移動する

次のように、一度に複数の番号が付けられたフォルダを作成できます。

mkdir Season\ {1,2,3,4,5}

forループなしでonelinerで次のコマンドを実行する方法はありますか?

mv 01.* Season\ 1
mv 02.* Season\ 2
mv 03.* Season\ 3
mv 04.* Season\ 4
mv 05.* Season\ 5

これを行うZSH方法がある場合は、ボーナスポイントがあります。

ベストアンサー1

そしてzsh

autoload zmv # best in ~/.zshrc
zmv -n '(<1-5>).*' 'Season $(($1))'

(嬉しいときは削除-n

ファイルごとに1つのコマンドを呼び出すので、mv質問の5つのコマンドよりも効率が悪くなります(組み込みコマンドを取得するために事前に実行しない限り)。mvzmodload zsh/filesmv

Aperlrename代替:

rename -n '$_="Season $1/$_" if /0*(\d+)/' 0[1-5].*

-n(満足すれば削除)

renameシステムコールが呼び出されるため、rename()同じファイルシステム内でファイルを移動するときにのみ機能します(一方、mvコピー+リンク解除はファイルシステムの境界を超えてファイルを移動するときに使用されます)。

使用mmv(FS境界を超える移動はサポートされていますが、すべての属性が保持されるわけではなく、シンボリックリンクの場合は、ターゲットファイルのコピーが作成されます):

mmv -n '0[0-9].*' 'Season #1/'

-n(満足すれば削除)

おすすめ記事