폴더 구조를 유지하면서 여러 파일 확장자를 찾아 압축합니다.

폴더 구조를 유지하면서 여러 파일 확장자를 찾아 압축합니다.

우분투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

7zzip 파일을 만들어주시면 됩니다.

find7zip이 없으면 다중 인수 옵션을 사용할 수도 있습니다.

find suan \( -name \*.cfg -o -name \*.txt -o -name \*.ini \) \
    -exec zip -r "$backupfilename" {} +

답변2

사용 findzip:

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을 숨겨진 파일과 일치하게 합니다.

관련 정보