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


9

私は何かをしようとしています

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ファイルで終了します。

回答:


8

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

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


それを試すのは私には思いもしなかった。どうもありがとうございます!しかし、本当に-Iでそれらを渡したい場合はどうなりますか?それを正しくフォーマットする方法はありますか?
oligilo

-Iフラグを使用する場合{}は、replacestring 以外のものを使用する必要があります。例ls -t | head -n 3 | xargs -I foo tar -cf t.tar foo
デビッドキング、

実行しましたが、同じ結果が得られます。最後のファイルのみ、または同等の方法で、アイテムごとに個別にtarコマンドを実行します。
oligilo

xargsのマニュアルページをさらに読んだ後... 効果的に、1行の入力ごとに次のコマンドを実行-Iすること-L 1を意味します。これが、結果を表示している理由です。
David King、

ああ、分かった; 手伝ってくれてどうもありがとう; それは何日も私を悩ませていました。ほんとうにありがとう。
oligilo

0

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

rm -f t.tar 2>/dev/null  # remove tar if there
ls -t | head -n 3 | xargs tar -rf t.tar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.