0

我实际上是根据我通过java代码下载的pdf文件创建一个zip文件,所以问题陈述是这样的。

我有一个带有特殊符号的 pdf 文件 = (wallbay)+1-50 m+ ipad+i pho ne%watch.pdf

现在我希望这个文件被创建为一个 zip 文件,它应该有一个名字 =(wallbay\)+1-50m+ipad+iphone%watch.pdf.zip

我尝试了以下命令:

cd /Users/rkr5/Downloads/admin && zip --symlinks -r \(wallbay\)+1-50m+ipad+iphone%watch.pdf.zip   \(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf
                        
cd /Users/rkr5/Downloads/admin && zip --symlinks -r "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf.zip"   "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"
                        
cd /Users/rkr5/Downloads/admin && zip --symlinks -r \(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf.zip   "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"

他们都没有工作并抛出错误"parse error near ``)'"

唯一有效的命令是

cd /Users/rkr5/Downloads/admin && zip --symlinks -r \(wallbay\)+1-50m+ipad+iphone%watch.pdf.zip    \(wallbay\)+1-50m+ipad+iphone%watch.pdf

但上述命令仅在 pdf 文件名中没有空格时才有效。

目前我的文件夹结构是

/Users/rkr5/Downloads/admin/(wallbay)+1-50m+ipad+iphone%watch.pdf.zip
/Users/rkr5/Downloads/admin/(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf

我目前正在使用 MacOs..

4

1 回答 1

0

由于文件名包含由 shell 解释的字符(如())或空格,因此您需要转义或引用它们。

我建议引用:它更容易,并且要求您只需用双引号 ( ) 将未修改"的文件名括起来,如下所示:

cd /Users/rkr5/Downloads/admin && zip --symlinks -r "(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf.zip" "(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"

如果您愿意,可以使用 shell 变量来避免重复文件名两次:

filename="(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"
cd /Users/rkr5/Downloads/admin && zip --symlinks -r "$filename.zip" "$filename"

(由于您只压缩一个文件,因此-r不需要该选项。)

为什么你的命令不起作用?

这个命令:

cd /Users/rkr5/Downloads/admin && zip --symlinks -r \(wallbay\)+1-50m+ipad+iphone%watch.pdf.zip   \(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf

不起作用,因为 PDF 文件名中的空格和第二个括号没有被转义。

这个命令:

cd /Users/rkr5/Downloads/admin && zip --symlinks -r "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf.zip"   "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"

不起作用,因为它既被引用部分)被转义。

这个命令:

cd /Users/rkr5/Downloads/admin && zip --symlinks -r \(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf.zip   "\(wallbay)+1-50 m+ ipad+i pho ne%watch.pdf"

不起作用,因为它被引用部分)转义,并且在 zip 存档名称的末尾缺少双引号。

于 2021-04-25T17:01:50.747 回答