우분투16.04
백업 폴더에 폴더 구조를 zip 파일로 유지하면서 모든 .txt, .cfg 및 .ini 파일을 백업하고 싶습니다.
모든 작업을 수행하는 더 쉬운 방법이 있다는 것을 알고 있지만 이것이 제가 가지고 있는 방법입니다.
#!/bin/bash
wdir="/home/files"
backup_dir="/home/files/backup"
allcfg=$(find suan -name '*.cfg')
alltxt=$(find suan -name '*.txt')
allini=$(find suan -name '*.ini')
timeStamp="$(date +%Y--%b-%d--%k:%M--%P)"
backupfilename="${backup_dir}/Backup-${timeStamp}.zip"
#-- set some arrays ...
backupfiles=( "$allcfg" "$alltxt" "$allini" )
cd "$wdir"
zip -r "$backupfilename" "$backupfiles"
따라서 보관된 파일의 좋은 출력을 볼 수 있지만 압축 부분에 도달하면 오류가 발생합니다.
zip error: Nothing to do! (try: zip -r /home/files/backup/Backup-2018--Jul-04--21:37--pm.zip . -i suan/cfg/360controller.cfg
하지만 그것도 작동하지 않습니다.
답변1
-r
이것이 재귀 옵션이 작동하는 방식입니다 7z
. 이는 재귀 패턴 검색입니다.
7z a -r "$backupfilename" \*.ini \*.cfg \*.txt
7z
zip 파일을 만들어주시면 됩니다.
find
7zip이 없으면 다중 인수 옵션을 사용할 수도 있습니다.
find suan \( -name \*.cfg -o -name \*.txt -o -name \*.ini \) \
-exec zip -r "$backupfilename" {} +
답변2
사용 find
및 zip
:
find "$wdir" -type f '(' -name '*.cfg' -o -name '*.txt' -o -name '*.ini' ')' \
-exec zip -r "$backupfilename" {} +
또는 cd
스크립트를 먼저 넣은 "$wdir"
다음 아카이브에 저장하려는 경로에 따라 명령 .
에서 사용할 수도 있습니다.find
그러면 모든 관련 파일을 찾아 백업 파일에 보관합니다.
또는 bash
수천 개의 파일이 없는 경우:
set -s globstar nullglob dotglob
cd "$wdir" && zip -r "$backupfilename" **/*.ini **/*.cfg **/*.txt
여기에 설정된 쉘 옵션은 **
glob(glob 경로 이름)을 활성화하여 확장되지 않은 glob이 빈 문자열로 확장되고 glob을 숨겨진 파일과 일치하게 합니다.