web-dev-qa-db-ja.com

xargsコマンドでワイルドカードを使用する方法は?

番号付きのファイルを含むディレクトリがあります。 1_foo.txt 2_bar.asc 13_test.pngであり、できるだけ単純なbashコマンドを使用して、それらを個々のディレクトリ(1、2、13など)に移動したい。

番号付きディレクトリの作成は簡単でした。

mkdir $(seq 1 15)

また、ファイルをそれぞれのディレクトリにコピーするコマンドを考え出しました。

seq 15 -1 1 | xargs -I@ mv @_* @

ただし、xargsで使用すると*は通常の文字として解釈され、「mv:File '15_ *' notfound。」のようなエラーが発生するため、これは機能しません。

Xargsによって呼び出されるコマンドでワイルドカードとして*を使用する簡単な方法はありますか?

10
n.st

そのためにxargsを使用しないでください。 forループを使用します:

for i in $(seq 1 15); do
    mv ${i}_* $i
done

さらに良いのは、seqの代わりに 中括弧の展開 を使用することです。

mkdir {1..15}

for i in {1..15}; do
    mv ${i}_* $i
done
6
user1686