Bash 스크립트의 Tar 제외 매개변수가 작동하지 않습니다.

Bash 스크립트의 Tar 제외 매개변수가 작동하지 않습니다.

쉘에서 직접 잘 작동하는 tar 명령줄이 있습니다.

tar --exclude=out/pictures/\*.{jpg,gif,png,jpeg} --exclude=tmp/\*.{txt,php} --exclude=log/\*.{log,sql} -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

이 명령을 bash 스크립트에 넣고 실행하면 제외 매개변수가 무시됩니다.

나는 다음과 같은 몇 가지 다른 구문을 시도했습니다.

tar --exclude="out/pictures/\*.{jpg,gif,png,jpeg}" -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

tar --exclude='out/pictures/\*.{jpg,gif,png,jpeg}' -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

tar --exclude out/pictures/\*.{jpg,gif,png,jpeg} -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

tar --exclude= out/pictures/\*.{jpg,gif,png,jpeg} -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

그러나 아무것도 작동하지 않습니다. 제외 매개변수는 단순히 무시됩니다.

간단한 --exclude는 --exclude="tmp"예상대로 작동합니다. 매개변수를 사용하기 시작하면 내가 가정하는 구문이 깨집니다.

우분투 18.04.5에서 tar(GNU tar) 1.29를 실행 중입니다.

답변1

브레이크 확장은 sh가 아닌 bash에서만 작동합니다. Shebang이 bash로 설정되어 있는지 확인하십시오.

#!/usr/bin/env bash

스크립트를 실행 가능하게 만들고 직접 호출하세요.

chmod +x myscript.sh
./myscript.sh

명령 앞에 echo를 추가하여 언제든지 확장을 확인할 수 있습니다.

echo tar --exclude=out/pictures/\*.{jpg,gif,png,jpeg} --exclude=tmp/\*.{txt,php} --exclude=log/\*.{log,sql} -cvf /backups/mydomain.tar -C /var/www/vhosts/mydomain.com/httpdocs content

답변2

음, 오늘 중요한 것을 배웠습니다.

Bash 쉘은 중괄호 확장을 지원합니다. sh 쉘 (sh는 쉘인가요?) 하지만 아닙니다.

저처럼 스크립트를 실행시키면 sh myscript.shsh shell을 이용해 스크립트가 실행됩니다. bash myscript.sh즉시 적용됩니다.

하지만 sh 파일의 링크가 #!/bin/bashbash를 사용하여 스크립트를 실행하도록 강제하면 안 되나요?

누군가 이것을 설명할 수 있나요? 조금 혼란스러워요.

이것을 ./script.sh로 실행하면 커널이 첫 번째 줄(shebang)을 읽은 다음 bash를 호출하여 스크립트를 해석하게 됩니다. 시스템의 기본 sh가 사용하는 쉘을 사용하여 sh script.sh로 실행하십시오(Ubuntu에서는 Dash이며 sh와 호환되지만 Bash의 일부 추가 기능을 지원하지 않습니다).

그것이 모든 것을 설명하겠지만 내 우분투의 기본 셸 echo $SHELL은 bash입니다(이 인용문은 2010년의 것이므로 당시 우분투의 기본 셸은 대시라고 가정합니다).

에 해당하더라도 이해하고 싶습니다 bash myscript.sh.

답변3

시도 해봐:

tar --exclude="out/pictures/*.{jpg,gif,png,jpeg}" -cvf /backups/mydomain.tar -C "/var/www/vhosts/mydomain.com/httpdocs content"

관련 정보