나는 업로드 폴더(크기가 상당히 큼)를 백업하기 위해 스크립트 파일을 만드는 것을 좋아하는데, 문제는 스크립트가 매일 자정마다 백업하므로 zip 파일이 상당히 크다는 것입니다.
3 월 1 일
Upload
├── sub01/
│ ├── file-01.jpg (1 mar)
│ ├── file-02.jpg (1 mar)
│ ├── file-03.jpg (1 mar)
│ └── file-04.jpg (1 mar)
├── sub02/
│ ├── file-05.jpg (1 mar)
│ └── file-06.jpg (1 mar)
백업 예를 들어 매일 zip을 만들 수 있는 방법을 알고 싶습니다. 첫날(예: 3월 1일)은 큰 zip 파일이 되고 다음 날 zip은 3월 2일에만 생성/수정되며 매일 백업을 유지합니다. 낮.
3월 2일
Upload
├── sub01/
│ ├── file-01.jpg (1 mar)
│ ├── file-02.jpg (1 mar)
│ ├── file-03.jpg (2 mar)
│ └── file-04.jpg (1 mar)
├── sub02/
│ ├── file-05.jpg (1 mar)
│ └── file-06.jpg (1 mar)
└── sub03/
├── file-07.jpg (2 mar)
├── file-08.jpg (2 mar)
├── file-09.jpg (2 mar)
└── file-01.jpg (2 mar)
02032022.zip
파일이 포함 됩니다
Upload
├── sub01/
│ └── file-03.jpg (2 mar)
└── sub03/
├── file-07.jpg (2 mar)
├── file-08.jpg (2 mar)
├── file-09.jpg (2 mar)
└── file-01.jpg (2 mar)
cron이 압축할 스크립트 파일을 어떻게 만들 수 있나요?
답변1
GNU find/awk 및 bsdtar 사용( libarchive-tools
최신 데비안 버전용 패키지)
LC_ALL=C find . -iname '*.jpg' -type f -printf '%p\0%TF\0' |
gawk -v RS='\0' -v ORS='\0' '
{
getline date
print | "bsdtar --format zip --null -T - -cf "date".zip"
}'
해당 날짜에 마지막으로 수정된 파일을 포함하는 1개의 파일이 생성됩니다 YYYY-MM-DD.zip
.jpg
bsdtar
이러한 많은 명령을 병렬로 실행할 수 있습니다 . 파일이 여러 날짜에 마지막으로 수정된 경우 이로 인해 시스템이 과부하될 수 있습니다.
전날(현지 시간)에 마지막으로 수정된 파일에 대해서만 zip 파일을 생성하려면 다음을 수행할 수 있습니다.
LC_ALL=C find . -iname '*.jpg' -daystart -mtime 1 -print0 |
bsdtar --format zip --null -T - -cf "$(date -d yesterday +%F).zip"
이것은 모호하지 않고 파일 이름이 어휘순 및 시간순으로 동일하게 정렬된다는 것을 의미하기 때문에 귀하의 형식보다 더 나은 형식이지만, 이를 DDMMYYYY.zip
사용하려는 경우 .%TF
%Td%Tm%TY