web-dev-qa-db-ja.com

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

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

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

最後に変更された3つのファイルをアーカイブしますが、ファイルごとに個別にtarコマンドを実行し、最後に3つのファイルの最後を含む1つのtarファイルが残ります(順序は任意)。 「xargs」を正しく使用していないことはわかっていますが、検索しても効果がありませんでした。どちらも機能しない例を見つけました。より単純なコマンドでも

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

そのディレクトリ内のファイルの1つだけを含むtarファイルで終了します。

9
oligilo

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

私のために働く。 -Iフラグを設定する必要がある理由はありますか?

8
David King

この投稿 によると、rが入力を切り詰めて、最後のチャンクのみを含むtarファイルを生成する場合は、cではなくxargsを使用することをお勧めします。したがって、より良い解決策は次のとおりです。

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