選択したファイルとディレクトリの自動tarバックアップ用のBashスクリプト

選択したファイルとディレクトリの自動tarバックアップ用のBashスクリプト

Linux環境の特定のディレクトリからすべての項目を選択する必要があります。文書特定の日付(例:7日)以降、すべての日付以降の編集目次(ルートディレクトリにのみあるため再帰的ではありません)同じ日付以降に作成されました。

その後、最後に与えられた規則を除いて3つのディレクトリを処理する必要があります。そのためには、プロセスは各パスで反復的でなければなりません。これらのディレクトリの1つには、とにかく除外する必要があるファイルがあります。

最後に、これらのパターンに一致するすべてのオブジェクトを単一の.tarアーカイブに追加する必要があります。もちろん、各ファイル/ディレクトリは.tarファイル内のフル相対パス(デフォルトディレクトリの)を維持する必要があります。

では、次のような結果があるとしましょう。

myHome
|-- normalDir1                  //  older than 7 days
|   |-- blah.txt
|   |-- to_be_excluded_nmw.txt  //  should never be included anyways
|   `-- poems.txt
|-- normalDir2                  //  created yesterday
|   |-- blah2.txt               /*
|   |-- whatever2.txt            *  Since it's a normal directory,
|   |-- whatever3.txt            *  I want to exclude these files from .tar
|   `-- poems2.txt               */  
|-- exceptionDirectory1         //  older than 7 days
|   |-- actions                 //  older than 7 days
|   |   `-- power.sh            //  older than 7 days
|   `-- events                  //  older than 7 days
|       |-- deploy.php          //  older than 7 days
|       `-- set.php             //  older than 7 days
|-- exceptionDirectory2         //  older than 7 days
|   |-- actions2
|   |   `-- power2.sh           //  created yesterday
|   `-- events2                 //  older than 7 days
|       |-- deploy2.php         //  created yesterday
|       `-- set2.php            //  older than 7 days
|-- file_to_be_updated.php      //  created yesterday
`-- file_NOT_to_be_updated.php  //  older than 7 days

生成された .tar には以下を含める必要があります。

./normalDir2/
./exceptionDirectory2/actions2/power2.sh
./exceptionDirectory2/events2/deploy2.php
./file_to_be_updated.php

私はこのスクリプトを作成しました:

#!/bin/bash
TODAY=`date --rfc-3339=date`
FILENAME=$TODAY-package.tar
find ./require ! -name db_connection.php         ! -path ./require -mtime -7 -print | xargs tar cvf `date --rfc-3339=date`-package.tar
find ./img                                       ! -path ./img     -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar
find ./plugin                                    ! -path ./plugin  -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar
find . -maxdepth 1 ! -name $TODAY-package.tar.gz ! -path .         -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar

しかし、次のエラーでほとんどすぐに終了するため、うまくいかないようです。

tar: ./img: Impossibile open: Is a directory

「require」、「img」、「plugin」は、再帰的に処理される3つの特別なディレクトリです。スクリプトに問題がありますか?助けてくれてありがとう。

ベストアンサー1

.txtの下のファイル名にスペースやその他の特殊文字が含まれると、エラーが発生します./img

-printオプションを使用しないでfind、代わりに `xargs'に対応するオプションを使用してください-print0-0

 find ./img ! -path ./img -mtime -7 -print0 | xargs -0 tar uvf `date --rfc-3339=date`-package.tar

おすすめ記事