web-dev-qa-db-ja.com

特定のファイルタイプを見つけてそれらを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を変更しようとしましたが、何もうまくいきません。

だから、私は完全に間違ったコマンドを入力したのですか、それとも見逃したものがありますか?

2
HabibieND

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

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

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

リファレンスについては、公式ドキュメントを参照してください。

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

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

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

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

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

tar tf backupp.tar
3
igal

単純にワイルドカードを使用できます

tar -cvf backup.tar *.png

またはfindを使用して

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

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

1
etopylight