tar에 대한 Bash 스크립트 - 인용 문제

tar에 대한 Bash 스크립트 - 인용 문제

파일 이름을 위치 매개변수로 사용하는 스크립트가 있습니다. 나는 그들에 대해 몇 가지 작업을 수행한 다음 tar를 수행합니다. 현재 내 스크립트가 제대로 작동하지 않습니다. 에코 라인은 디버깅 목적으로 사용됩니다.

이 진술을 명확히 해주세요.

그런데 스크립트에서 tar를 사용하려고 하면 tar하고 싶은 파일을 보관할 수 있나요?

파편

while [[ $# > 0 ]]; do
    key="$1"
    shift
    files=$files" "\"${key}\"
 done

echo tar -cvf backup.tar $files
tar -cvf backup.tar $files

산출:

tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

공백이 있는 파일을 처리하고 싶기 때문에 파일 이름(test.txt) 주위에 큰따옴표를 사용하고 있습니다.

스크립트에서 따옴표(\")를 제거하면 작동하지만 공백이 있는 파일 이름은 처리할 수 없습니다.

어떤 아이디어가 있나요?

답변1

항상 모든 매개변수를 사용하는 경우 tar다음과 같이 호출 하면 됩니다 tar -cvf backup.tar "$@". 그렇지 않고 하위 집합을 선택하는 경우(표시하지는 않지만) 다음과 같이 배열로 파일 목록을 작성합니다.

declare -a files
while [[ $# > 0 ]]; do
    key="$1"
    shift
    # assume some filtering goes on here
    files+=("$key")
 done

tar -cvf backup.tar "${files[@]}"

관련 정보