![如何将带有空格的文件名传递给“zip”?](https://linux22.com/image/176682/%E5%A6%82%E4%BD%95%E5%B0%86%E5%B8%A6%E6%9C%89%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E4%BC%A0%E9%80%92%E7%BB%99%E2%80%9Czip%E2%80%9D%EF%BC%9F.png)
这感觉像是一项非常简单的任务,但我无法让它发挥作用。我想将目录中的前 13 个文件放入存档中.zip
。执行此操作的明显方法是
zip first13.zip $(ls | head -n 13)
但这失败了,因为某些文件名(由于愚蠢的制度原因我无法更改这些文件名)中有空格。替换ls
为ls --quoting-style=shell-always
并没有帮助(它实际上使事情变得更糟,因为不知何故zip
最终会寻找以文字'
字符开头和结尾的文件,但仍然解析空格......)并且两者都没有帮助
ls | head -n 13 | xargs zip first13.zip
再次,zip
解析空格。
奇怪的是,zip all.zip ./*
工作正常,如此清晰一些某种转义是可能的,但我不知道如何复制zsh
其通配符中的任何内容。
如果有多个版本zip
,我的版本是 Arch Linux 官方软件包中的版本zip
,并将自己标识为Copyright (c) 1990-2008 Info-ZIP
. shellzsh
版本是5.8。
答案1
既然您正在使用zsh
,您应该能够使用全局限定符[m,n]
选择一系列匹配项的形式-head
完全避免管道(及其隐式空格分割):
zip first13.zip ./*([1,13])
man zshexpn
详情请参阅