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