특정 폴더를 자동으로 백업하고 제외합니다.

특정 폴더를 자동으로 백업하고 제외합니다.

특정 하위 폴더를 제외하면서 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

확인하다이것도.

관련 정보