tar 제외가 bash에서 작동하지 않습니다.

tar 제외가 bash에서 작동하지 않습니다.

tar 제외를 위해 bash 스크립트를 사용할 수 없습니다.

#!/bin/bash


CMD='tar --exclude=*.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test'
echo $CMD
sudo $CMD

그러나 echo 출력 명령을 실행하면 작동합니다.

tar --exclude=*.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test

파일 확장자를 기준으로 파일을 제외하려고 합니다.

타르(GNU 타르) 1.30

답변1

Bash에서는 배열을 사용해야 합니다:

cmd=(tar --exclude='*'.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test)

echo "${cmd[@]}"

=> tar --exclude=*.db --exclude=*.log --exclude=*.token ...

"${cmd[@]}"
# etc

위의 내용은 누군가 가 명령을 실패하게 만들기 위해 '*'현재 디렉토리에 --exclude=foo.log이라는 파일을 심는 것을 방지하기 위한 것입니다 ;-)--exclude=bar.log

이는 tar와 관련이 없지만 쉘(bash) 및 명령줄을 구문 분석하고 확장하는 방법과 관련이 있으며, {db,log,...}다른 쉘(예: dash 또는 busybox sh)은 배열 또는 중괄호 확장을 지원하지 않습니다.

관련 정보