特定のファイルタイプを見つけて tar する方法は?

特定のファイルタイプを見つけて tar する方法は?

どうやら問題があるようです。現在のディレクトリにいくつかの異なるファイルタイプがあり、タール.pngファイル。私はこれで始めました:

find -name "*.png" | tar -cvf backupp.tar

どのファイルを指定しなかったため動作しませんでした。そこで、他の人のやり方を参考にして、xargs を追加しました。

find -name "*.png" | xargs tar -cvf backupp.tar

今回はうまくいき、backupp.tar ファイルが作成されましたが、ここで問題があります。どうやら解凍できないようです。次のように入力するたびに、

tar -xvf backupp.tar

何も起こりません。chmod と sudo を変更してみましたが、何も起こりません。

それで、完全に間違ったコマンドを入力したのでしょうか、それとも何か見逃したことがあるのでしょうか?

答え1

2 つのアプローチはどちらもほぼ機能していましたが、それぞれに明確な問題がありました。

最初のアプローチでは、ファイルのリストをパイプで渡そうとしますtar。標準入力からファイルのリストを読み取りたい場合は、 /とオプションtarを使用する必要があります。例:-T--files-from-

find -name '*.png' -print0 | tar -cvf backup.tar --null -T - 

参考までに、公式ドキュメントをご覧ください。

注記:-print0およびフラグを使用すると、--null空白を含むファイル名も処理されるようになります。

tar2 番目のアプローチでは、経由で実行しようとしていますxargsが、「作成」オプション ( --create/ -c) を使用しています。 for ループで、または for ループ内で「作成」オプションを使用すると、反復ごとにアーカイブが上書きされます。 代わりに、「追加」オプション ( / ) または「更新」オプション ( / )xargsのいずれかを使用してみてください。例:-a--append-u--update

find -name "*.png" -exec tar -uvf backupp.tar {} \;

これにより、各反復の後にアーカイブを上書きするのではなく、アーカイブにファイルが追加されます。

いずれにしても、完了したら、「リスト」オプション ( --list/ -t) を使用してアーカイブの内容を表示し、すべてが期待どおりに動作したことを確認できます。

tar tf backupp.tar

答え2

ワイルドカードを使うだけで

tar -cvf backup.tar *.png

またはfind

find -name "*.png" | tar -cvf backup.tar -T -

オプション-TはFILEからファイル名を取得します。この場合はstdinです。-

関連情報