Answers:
尝试将zip文件名括在引号中,以便unzip知道它只是一个文件名:
find . -name "*.zip" -exec sh -c 'unzip -l "{}" | head -n 7' \;
我们需要在上面的命令中引用{}的原因是我们将字符串传递给sh以作为命令行运行。
我将尝试逐步解释发生的事情:
对于与* .zip匹配的每个文件,我们将运行该命令 sh -c 'unzip -l "{}" | head -n 7。 sh -c 'blahblablah' 在-c之后获取参数并运行它,就好像它是在命令行中输入的一样。
所以给了一个文件名 File A.zip (带空格)我们将执行命令行:
unzip -l File A.zip | head -n 7
现在,当我们不引用文件名时会发生什么,在调用unzip之前,shell会将参数列表拆分为单独的参数,从而产生一个列表:
"unzip" "-l" "File" "A.zip"
意思就是 unzip 将尝试打开zip文件 File 并寻找该项目 A.zip 存档内部。
如果我们将参数括在引号中,shell将扩展为以下参数列表:
"unzip" "-l" "File A.zip"
赢得! unzip 现在将尝试打开zip文件“File A.zip”并列出其内容。