以下は、見つかったファイルの結果を検索してダンプする 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にあるとします(前の質問にタグを付けたように)。X)、あなたが望むのは、おそらくファイルへのパスを書き、そのファイルをtar -L listfile
(-L
オプションと組み合わせることです)tar
AIXではアーカイブするパス名を含むリストファイルが提供されます)。
find ...as you had... >listfile
tar -cf archive.tar -L listfile
AIXシステムへのアクセス権がないため、これをテストできません。