検索結果のファイルをtarファイルにインポートできません

検索結果のファイルをtarファイルにインポートできません

以下は、見つかったファイルの結果を検索してダンプする find コマンドです。/tmp/findall.log

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o -print | tee  /tmp/findall.log

次のように、検索結果でステージフォルダを表示できます。

grep stage /tmp/findall.log | more
/app/test/Server2/stage_02032020
/app/test/Server2/stage_02032020/Buyers
/app/test/Server2/stage_02032020/Buyers/BuyersQuote.xlsx
/app/test/Server2/stage_02032020/Buyers/xml

find次に、次のコマンドを使用して結果で見つかったファイルを圧縮することにしました。

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs -0 tar -cvf /app/test_Backup.tar

しかし、私のtarファイルには、以下の検索結果のようにステージフォルダがありません。

tar -tvf test_Backup.tar | grep stage
No results Found.

検索結果のファイルがtarファイルから欠落している理由をお勧めしますか?

答え1

空の文字列などが渡されたことを「発見」することができます。 "--no-run-if-empty"を使用して問題を解決することができます。その後、tarを生成しないでください。

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs --no-run-if-empty -0 tar -cvf /app/test_Backup.tar

ちなみにあなたのコードは私のRaspberry Piで実行されます。 GNU bash、バージョン 4.4.19(1)-リリース(armv7hl-redhat-linux-gnu)

答え2

findコマンドが生成される場合たくさんpathname の場合、複数回xargs実行される可能性が高くなりますtar。各実行は、tar最後の実行で作成されたアーカイブを上書きするため、最後に見つかったファイルのバッチで構成されたアーカイブがtar作成されます。find

AIXにあるとします(前の質問にタグを付けたように)。)、あなたが望むのは、おそらくファイルへのパスを書き、そのファイルをtar -L listfile-Lオプションと組み合わせることです)tarAIXではアーカイブするパス名を含むリストファイルが提供されます)。

find ...as you had... >listfile
tar -cf archive.tar -L listfile

AIXシステムへのアクセス権がないため、これをテストできません。

関連情報