了解 Linux 环境反斜杠和星号的使用

了解 Linux 环境反斜杠和星号的使用

我在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 )

它无法运行,因为当我传递基数的结果时,它没有获得值,因此它失败了。

  1. 调用 konsole 命令时何时使用“\”或“*”或将两者结合使用?
  2. 如何将 zip 文件解压到具有自己名称的目录中?

答案1

特别是的使用unzip可能会导致一些混乱。它可以被称为

$ unzip x.zip file-1 file-2 file-3

其中file-1等是包含在x.zip.对于这个答案的其余部分,我将假设当前目录包含两个.zip文件:x.zipy.zip

当 shell 执行 glob 扩展(通配符,例如*?)时,每个匹配的文件将成为一个单独的参数。所以

$ unzip *.zip

变成

$ unzip x.zip y.zip

y.zip请记住,此语法的意思是“从存档中提取文件x.zip”。为了允许多个存档,unzip还将处理通配符。如果您想让unzip处理通配符而不是 shell,则必须引用或转义它们:

$ unzip \*.zip

或者

$ unzip '*.zip'

相关内容