Gau*_*ier 5 command-line zip wildcards arguments
要将一堆 zip 文件从一个位置复制到另一个位置:
$ cp *.zip destination/
Run Code Online (Sandbox Code Playgroud)
将一堆 zip 文件解压缩到一个目录:
$ unzip \*.zip -d destination/
Run Code Online (Sandbox Code Playgroud)
man unzip 说:
星号前的反斜杠仅在 shell 扩展通配符时才需要,如在 Unix 中
让我感到困惑的是,这两个命令的行为方式似乎不同。他们为什么不呢?有没有办法知道或猜测每个命令的行为方式,而不是每次都记住或阅读手册页?
是否不同,因为它cp被实现为采用多个源参数而unzip不是?unzip可以取带通配符的字符串,为什么不实现取多个源文件呢?
获取源参数的标准方法是什么?是不是cp真的做得太多了?
如果您有两个 zip 文件a.zip并且b.zip在当前目录中,则
$ cp *.zip destination/
Run Code Online (Sandbox Code Playgroud)
扩展到
$ cp a.zip b.zip destination/
Run Code Online (Sandbox Code Playgroud)
for 的语义cp是同时复制a.zip和复制b.zip到目的地。
如果你输入
$ cp \*.zip destination/
Run Code Online (Sandbox Code Playgroud)
它只是“扩展”到
$ cp '*.zip' destination/
Run Code Online (Sandbox Code Playgroud)
即它会尝试将名为“*.zip”的单个文件复制到目标,这不是您想要的。
另一方面,如果您键入
$ unzip *.zip -d destination/
Run Code Online (Sandbox Code Playgroud)
它将再次扩展到
$ unzip a.zip b.zip -d destination/
Run Code Online (Sandbox Code Playgroud)
语义unzip是在存档“a.zip”中找到一个名为“b.zip”的文件,这又不是您想要的。
如果你输入
$ unzip \*.zip -d destination/
Run Code Online (Sandbox Code Playgroud)
该unzip命令不仅会尝试解压缩调用的文件*.zip,还会解压缩所有以.zip.
不同之处在于这两个命令对它们的参数的解释不同。
| 归档时间: |
|
| 查看次数: |
3043 次 |
| 最近记录: |