「xargs」を介して「ls」から「tar」に変数を渡す

「xargs」を介して「ls」から「tar」に変数を渡す

私は次のようなことをしようとしています。

ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}

最後の3つの変更されたファイルはアーカイブされますが、最終的には各ファイルに対して個別にtarコマンドが実行され、順序に関係なく3つのファイルのうち最後のファイルを含むtarファイルが残ります。私は "xargs"を正しく使用しないことを知っていますが、検索は役に立ちませんでした。私が見つけたいくつかの例はうまくいきません。より簡単なコマンド

ls | xargs -I {} tar -cf t.tar {}

そのディレクトリに1つのファイルのみを含むtarファイルが作成されます。

答え1

ls -t | head -n 3 | xargs tar -cf t.tar

私のために動作します。フラグを設定する理由がありますか-I

答え2

~によるとこの投稿、入力が破砕されて最後のチャンクのみを含むtarファイルを生成する場合は、代わりにr使用することをお勧めします。したがって、より良い解決策は次のとおりです。cxargs

rm -f t.tar 2>/dev/null  # remove tar if there
ls -t | head -n 3 | xargs tar -rf t.tar

関連情報