Bash 脚本到 tar – 引用问题

Bash 脚本到 tar – 引用问题

我有一个将文件名作为位置参数的脚本。我对它们执行一些操作,然后对它们进行 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[@]}"

相关内容