問題があるようです。現在のディレクトリにいくつかの異なるファイルタイプがあり、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つのアプローチはそれぞれほぼ機能していますが、それぞれに明確な問題がありました。
最初のアプローチでは、ファイルのリストをtar
にパイプしようとします。 tar
に標準入力からファイルのリストを読み取らせる場合は、-T
/--files-from
および-
オプションを使用する必要があります。
find -name '*.png' -print0 | tar -cvf backup.tar --null -T -
リファレンスについては、公式ドキュメントを参照してください。
注:-print0
フラグと--null
フラグを使用すると、空白を含むファイル名も処理されるようになります。
2番目のアプローチでは、tar
をxargs
経由で実行しようとしますが、「作成」オプション(--create
/-c
)を使用しています。 xargs
で、またはforループで「作成」オプションを使用すると、反復のたびにアーカイブが上書きされます。代わりに、「追加」オプション(-a
/--append
)または「更新」オプション(-u
/--update
)を使用してみてください。例:
find -name "*.png" -exec tar -uvf backupp.tar {} \;
これにより、ファイルを上書きするのではなく、各反復後にアーカイブにファイルを追加します。
どちらの方法でも、完了したら「リスト」オプション(--list
/-t
)を使用してアーカイブの内容を表示し、すべてが期待どおりに機能することを確認できます。
tar tf backupp.tar
単純にワイルドカードを使用できます
tar -cvf backup.tar *.png
またはfind
を使用して
find -name "*.png" | tar -cvf backup.tar -T -
-T
オプションはFILEからファイル名を取得します。この場合はstdin -