特定のサブフォルダを除外して、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 ...
答え2
私の考えでは、あなたに必要なものrsync
たとえば、
$ rsync -auxnv -T /temp/dir --exclude={"/dir/1","/dir/2",...} \
/source/file user@host:/dest/dir/
転送中に圧縮するオプションもあります。-z
読んでくださいman rsync
確認するこれも。