我在Linux环境下有两个相关问题。
我很困惑何时使用反斜杠\
并与星号“*”组合。当我尝试运行 Unzip *.zip 时,该命令会失败,直到我转义为止。为什么会这样呢?
developer@tz:~/f$ bash -version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
developer@tz:~/f$ unzip *.zip
Archive: abstract.zip
caution: filename not matched: date-function.zip
developer@tz:~/f$ unzip \*.zip
Archive: abstract.zip
inflating: abstract.xsl
Archive: date-function.zip
warning [date-function.zip]: zipfile is empty
1 archive was successfully processed.
1 archive had warnings but no fatal errors.
developer@tz:~/f$ ls *.zip
abstract.zip date-function.zip
developer@tz:~/f$ ls \*.zip
ls: cannot access '*.zip': No such file or directory
关于单行函数的类似问题。
假设我有 zip 文件: foo.zip 和 bar.zip 在同一目录中,我需要解压这两个文件;当我做:
ls *.zip | xargs -IZIP basename -s .zip ZIP
上面的命令将列出: konsole 上的 foo 和 bar,但是当我运行时:
ls *.zip | xargs -IZIP unzip ZIP -d $( basename -s .zip ZIP )
它无法运行,因为当我传递基数的结果时,它没有获得值,因此它失败了。
- 调用 konsole 命令时何时使用“\”或“*”或将两者结合使用?
- 如何将 zip 文件解压到具有自己名称的目录中?
答案1
特别是的使用unzip
可能会导致一些混乱。它可以被称为
$ unzip x.zip file-1 file-2 file-3
其中file-1
等是包含在x.zip
.对于这个答案的其余部分,我将假设当前目录包含两个.zip
文件:x.zip
和y.zip
。
当 shell 执行 glob 扩展(通配符,例如*
或?
)时,每个匹配的文件将成为一个单独的参数。所以
$ unzip *.zip
变成
$ unzip x.zip y.zip
y.zip
请记住,此语法的意思是“从存档中提取文件x.zip
”。为了允许多个存档,unzip
还将处理通配符。如果您想让unzip
处理通配符而不是 shell,则必须引用或转义它们:
$ unzip \*.zip
或者
$ unzip '*.zip'