web-dev-qa-db-ja.com

tarを作成するときに空のディレクトリを除外することは可能ですか?

次のようなバックアップコマンドがあります。

tar cvpzf /backup/incremental-$now.tar.gz --after-date='1 day ago' -C / etc/ home/ root/  --exclude-from=/root/exclusion_list.txt --warning=no-file-unchanged > /backup/log-$now.txt 2>&1

問題は、ファイル内のすべてのファイルが変更されていないため、増分バックアップに含まれていない場合に、空のフォルダーも含まれることです。これを回避する方法を探していますが、私が見つけた唯一の解決策(xargsを使用して、findの結果をtarとして引数として取得する)が機能するのは、フォルダーが1つしかない場合で、3つしかありません。

4
entropid

デフォルトでは、tarは空のディレクトリをスキップする手段を提供しません。とはいえ、単純なシェルスクリプトを薄い空気から引き出して、実行する必要があることを実行するのはそれほど多くの作業ではありません。

ここ は、必要に応じて、まったく同じ問題の解決策を見つけたフォーラムディスカッションです。

メジャーアップデート:まず、ずさんなコピー貼り付けについて真剣に謝罪する必要があります。それは深夜の投稿であり、私は私の知性のピークではありませんでした...

正しいフォーラム投稿は ここ です。実際には、同じ人が別のフォーラムで同じ質問をし、まったく異なる答えを得るのです。問題が発生したときに両方をブックマークし、間違ったものへのリンクを提供しました。

実際、ここに表示されているのは、findコマンドの出力をtarに「パイプ」する方法です。あなたはその男が尋ねている「より新しい」についてのすべてのものを無視しなければなりません。

代わりに、必要な検索部分は次のようになります。

find . -type d ! -empty | ...

もちろん、ドット( "。")を、検索/タールを開始する必要があるパスに置き換える必要があります。パイプの後、2番目のリンク(正しいリンク)に従ってtarコマンドを続行します。

細かいところまで気を付けていなくて困ったことを、改めて深くお詫び申し上げます。

5
dlyk1988