私に問題があるようだ。現在のディレクトリにはいくつかの異なるファイル形式があります。アスファルトこれ.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
含むファイル名も処理できることを確認する必要があります。
tar
2番目の方法では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
答え2
簡単にワイルドカードを使用できます。
tar -cvf backup.tar *.png
または使用してfind
find -name "*.png" | tar -cvf backup.tar -T -
この-T
オプションはFILEからファイル名を取得します(この場合はstdin)。-