파일 이름을 위치 매개변수로 사용하는 스크립트가 있습니다. 나는 그들에 대해 몇 가지 작업을 수행한 다음 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[@]}"