스크립트를 작성 중이며 tar
명령을 동적으로 작성 해야합니다 .
다음은 내가하려는 일을 설명하는 두 가지 예입니다.
#!/bin/bash
TAR_ME="/tmp"
EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*")
_tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz"
echo COMMAND: "${_tar}"
${_tar} "$TAR_ME"
echo -e "\n\nNEXT:\n\n"
EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*")
_tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz"
echo COMMAND: "${_tar}"
${_tar} "$TAR_ME"
_tar
명령 으로 사용할 수 있기를 원 하지만 클래식 경로에서 작동하도록 만들었지 만 폴더 이름의 공백으로 작동해야합니다. 그리고 매번 다음과 같은 오류가 발생했습니다.
COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" -zcf tmp.tar.gz /tmp
tar: hello": Cannot stat: No such file or directory
COMMAND: tar --exclude=/tmp/hello\ hello --exclude=/tmp/systemd* --exclude=/tmp/Temp* -zcf test.tar.gz
tar: hello: Cannot stat: No such file or directory
당신이 알아야 할 한가지, 아주 오래된 머신에서 작동하려면 스크립트가 필요합니다. 즉, 마지막 bash 기능을 사용할 수 없습니다.
--exclude 옵션은 그 뒤에 단일 문자열 만 허용 할 수 있다고 생각합니다. 그래도 여러 개의 --exclude 문을 가질 수 있습니다. "--exclude = / tmp / hello --exclude = hello"시도해보십시오. 신경 쓰지 마. 나는 오해했다.
—
Lewis M
@LewisM OP가 "/ tmp / hello hello"디렉토리를 제외하고 싶다고 생각합니다 (예, 공백이 있습니다)
—
Archemar
@ShellCode 모든 제외를 인용하는 것은 어떻습니까? 예 : "--exclude = / tmp / hello hello"
—
Archemar
네. 그래서 나중에 Oops 문을 작성했습니다. :)
—
Lewis M
어떻게 퍼팅에 대한
—
jimmij
eval
실행의 앞에?