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)은 배열 또는 중괄호 확장을 지원하지 않습니다.