Bash 脚本在压缩文件时不允许使用特殊符号
Bash Script Not allowing special symbols in zipping a file
我实际上是根据我通过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"
None 他们正在工作并抛出像 "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..
由于文件名包含由 shell(如 (
和 )
)或白色 space 解释的字符,您需要转义或引用它们。
我建议引用:它更容易,并且只需要用双引号将 未修改的 文件名括起来("
) 如下:
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
不起作用,因为白色 space 和 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"
不起作用,因为它被 both 引用 and (部分)转义。
这条命令:
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"
不起作用,因为它被 both 引用 and (部分)转义,并且末尾缺少双引号zip 存档的名称。
我实际上是根据我通过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"
None 他们正在工作并抛出像 "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..
由于文件名包含由 shell(如 (
和 )
)或白色 space 解释的字符,您需要转义或引用它们。
我建议引用:它更容易,并且只需要用双引号将 未修改的 文件名括起来("
) 如下:
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
不起作用,因为白色 space 和 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"
不起作用,因为它被 both 引用 and (部分)转义。
这条命令:
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"
不起作用,因为它被 both 引用 and (部分)转义,并且末尾缺少双引号zip 存档的名称。