特定のフォルダを自動的にバックアップして除外します。

特定のフォルダを自動的にバックアップして除外します。

特定のサブフォルダを除外して、cronの特定のフォルダを自動的にバックアップするために、次のbashスクリプトを作成しました。

folders_to_backup=(
    "/first/folder/to/backup/"
    "/second/folder/to/backup/"
)

backup_temp="/home/myuser/temp_backup_folder/"
mkdir $backup_temp
for i in "${folders_to_backup[@]}"
do
    cp -r $i $backup_temp
done

find $backup_temp | tar -czf "/home/myuser/backup.tgz" -T - -- exclude=*/venv --exclude=*/__pycache__
rm -r $backup_temp

だから基本的に私がすることは一時フォルダを作成し、バックアップしたいすべての関連項目をそのフォルダにコピーすることです。その後、フォルダを圧縮し(一部のサブフォルダを除く)、他の場所に保存しました。次に一時フォルダを削除します。

すべてを一時フォルダにコピーすると正常に動作します。ただし、tarファイルを開くと、各ファイルに複数の重複エントリが含まれています。たとえば、thenというファイルをバックアップした場合、test.txtそのファイルは一時ディレクトリにあります。ところで、tarファイルを見ると、複数のコピーがあることがわかります。test.txt

一時フォルダとtarの間に何が起こるのかわからないようです。上記の問題を解決するための提案や一時フォルダを使用せずにこれを行う方法に関する提案を歓迎します。

ベストアンサー1

tar --no-recursionまたは、find ... ! -type d検索がディレクトリを一覧表示するたびに、tarがすべてのディレクトリを再帰的にコピーするため、使用する必要があります。

-C dir .また、コピーを避け、配列の各ディレクトリに対して次のようにすることはできませんか?

args=()
for f in "${folders_to_backup[@]}"
do    args+=("-C" "$f" ".")
done
tar -czf "/home/myuser/backup.tgz" "${args[@]}" --exclude ...

おすすめ記事