'find -mtime -1 -print | xargs tar 'アーカイブディレクトリ内のすべてのファイル、-mtime -1パラメータを無視する

'find -mtime -1 -print | xargs tar 'アーカイブディレクトリ内のすべてのファイル、-mtime -1パラメータを無視する

バックアップスクリプトを作成しようとしています。私はこのスクリプトをCentOS 6.7システムで動作させ、Debian 7で動作させようとしています。

Googleやこのサイトで見つけることができる情報で解決できない問題に直面しました。この問題を議論する前に、私の状況を説明しようとします。

CentOSでは、過去24時間に変更されたファイルを見つけて、次のコマンドを使用$SOURCEDIRします。xargs$ARCHIVE

find $SOURCEDIR -mtime -1 -print | xargs -r tar rcvf $ARCHIVE || { echo "No files have been changed in the past 24 hours. Exiting script ..." ; exit 1; }

tar rcvf以下を使用して、次のエラーメッセージを呼び出すことができることを知っています。

「-Acdtrux」または「--test-label」オプションを複数指定することはできません。

しかし、CentOSシステムではこれが起こらないようです。それするDebianシステムでは、コマンドラインからrそのコマンドを削除しましたtar。最初にこれを追加したのは、find100以上の結果が返されたときにアーカイブを上書きするのを防ぎたかったからです。

今、実際の問題に進みます。走るたびに

find $SOURCEDIR -mtime -1 -print

$SOURCEDIR予想通り、過去24時間に変更されたファイルのリストが表示されます。しかし、xargsパイプシンボルと次の完全なコマンドを実行するたびに:

find $SOURCEDIR -mtime -1 -print | xargs -r tar cvf $ARCHIVE || { echo "No files have been changed in the past 24 hours. Exiting script ..." ; exit 1; }

find実際にコマンドが印刷されるのを見ました。みんなファイルは、$SOURCEDIR以下を含むアーカイブのインポートから来ます。みんなファイルから$SOURCEDIR理由を理解できません。どんな助けでも大変感謝します。

ベストアンサー1

他の人が指摘したように、コマンドの問題は、そのコマンドにディレクトリが含まれており、tarがそのディレクトリを再帰的に保持することです。ディレクトリが最近変更された場合は、その変更に関係なく、そのディレクトリとそのサブディレクトリ内のすべてのファイルが含まれます。

ディレクトリメタデータをバックアップしたくない場合は、findディレクトリ名を印刷しないように指示します。単にルートディレクトリを省略するだけでは不十分です。サブディレクトリでも同様です。

find "$SOURCEDIR" -mtime -1 ! -type d -print | xargs -r tar -rcf "$ARCHIVE"

xargsの使用ファイル名にスペースやその他の特殊文字が含まれていると失敗します。。これは修正が簡単です。-exec代わりにを使用してくださいxargs

find "$SOURCEDIR" -mtime -1 ! -type d -exec tar -rcf "$ARCHIVE" {} +

ディレクトリメタデータをバックアップするには、findすべての内容を印刷してからtarサブディレクトリに繰り返さないように指示します。find再帰が行われるので、これはtar必要ありません。

find "$SOURCEDIR" -mtime -1 -exec tar -rcf "$ARCHIVE" --no-recursion {} +

これにより、tar呼び出しを使用せずに最初にルートディレクトリのみをtar -rc含むアーカイブを作成し、それを一括追加して繰り返しtar呼び出しの問題を解決できます。 (なぜルートディレクトリですか?GNU tarは空のアーカイブを作成するのを恐れているからです。)

tar -cf "$ARCHIVE" --no-recursion "$SOURCEDIR"
find "$SOURCEDIR" -mindepth 1 -mtime -1 -exec tar -rf "$ARCHIVE" --no-recursion {} +

おすすめ記事