Tar 在 bash 中的每个反斜杠前加上额外的反斜杠
Tar puts additional backslash in front of every backslash in bash
我有一个数组 $files
,其中包含我想要 tar 在一起的文件地址。我这样做:tar czf "output.tgz" "${files[@]}"
。这一切都有效,直到名称中包含空格的文件为止。为此,我使用 path="${path// /'\ '}"
将所有 <space>
替换为 \<space>
,然后我将像这样 files+=("<space>$path");
添加到 $files
数组中。
当我尝试只使用一个名为 main and space.c
的测试文件时,$files
正确设置为: /home/tom/Desktop/main\ and\ space.c
当我在之前调用 echo "Files array looks like this: $files"
时tarring,但是当程序走到下一行的tarring时,我得到错误:
tar: /home/tom/Desktop/main\ and\ space.c: Cannot stat: No such file or directory
我可以tar避免在此处放置额外的反斜杠吗?
你一开始就是在和你的阵法战斗。只需将正确引用的名称添加到数组中即可; shell 将为您处理数组的内容。
$ files=()
$ files+=("test 1.txt")
$ files+=("test 2.txt")
$ files+=("test 3.txt" "test 4.txt")
$ tar czf output.tgz "${files[@]}"
$ tar tzf output.tgz
test 1.txt
test 2.txt
test 3.txt
test 4.txt
我有一个数组 $files
,其中包含我想要 tar 在一起的文件地址。我这样做:tar czf "output.tgz" "${files[@]}"
。这一切都有效,直到名称中包含空格的文件为止。为此,我使用 path="${path// /'\ '}"
将所有 <space>
替换为 \<space>
,然后我将像这样 files+=("<space>$path");
添加到 $files
数组中。
当我尝试只使用一个名为 main and space.c
的测试文件时,$files
正确设置为: /home/tom/Desktop/main\ and\ space.c
当我在之前调用 echo "Files array looks like this: $files"
时tarring,但是当程序走到下一行的tarring时,我得到错误:
tar: /home/tom/Desktop/main\ and\ space.c: Cannot stat: No such file or directory
我可以tar避免在此处放置额外的反斜杠吗?
你一开始就是在和你的阵法战斗。只需将正确引用的名称添加到数组中即可; shell 将为您处理数组的内容。
$ files=()
$ files+=("test 1.txt")
$ files+=("test 2.txt")
$ files+=("test 3.txt" "test 4.txt")
$ tar czf output.tgz "${files[@]}"
$ tar tzf output.tgz
test 1.txt
test 2.txt
test 3.txt
test 4.txt