特定のファイル形式を見つけて圧縮する方法は?

特定のファイル形式を見つけて圧縮する方法は?

私に問題があるようだ。現在のディレクトリにはいくつかの異なるファイル形式があります。アスファルトこれ.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

どちらの方法も有効に近いが、それぞれに明らかな問題がある。

最初の方法では、ファイルリストを.stdinから読み取るにはtar/とオプションをtar使用する必要があります。-T--files-from-

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

参考として公式文書を参照してください。

メモ:-print0フラグを使用すると、スペースを--null含むファイル名も処理できることを確認する必要があります。

tar2番目の方法ではviaを介して実行しようとしていますが、xargs「create」オプション(--create/ -c)を使用しています。 forループまたはforループ内で「create」オプションを使用すると、繰り返すたびxargsにアーカイブが上書きされます。代わりに、追加オプション(-a/ --append)または更新オプション(-u/ --update)を試してください。たとえば、次のようになります。

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

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

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

tar tf backupp.tar

おすすめ記事