解压文件,创建的是哪个目录?

Rob*_*ino 8 shell zip

客观的:

a.zip使用unzipon命令展开存档后Ubuntu 12.10,将a.zip展开到的文件夹的名称分配给bash变量v

a.zip 假定并保证扩展到单个文件夹,而不是多个文件夹。

例子:

如果unzip a.zip扩展到文件夹./foo/echo $v应该返回foo

我的环境:

GNU/Linux (kernel 3.5.0-25-generic)
Ubuntu 12.10    
bash v4.2.37(1)-release
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
Run Code Online (Sandbox Code Playgroud)

当前的解决方法不满意:扩展通过unzip -d bar a.zip然后v=$(ls -1 bar)给出正确的结果,但弄乱了文件系统。

小智 5

干得好:

v=$(unzip a.zip | grep -m1 'creating:' | cut -d' ' -f5-)
Run Code Online (Sandbox Code Playgroud)

解释

  • $(...)是一个捕获壳。它捕获其中的命令的输出并像变量一样替换它们。
  • unzip命令的输出grep通过管道传送到,它传递参数-m1以使其仅返回第一个结果和 text creating:,它是unzip创建目录时打印到标准输出的文本的一部分。grep打印creating: foo/到标准输出,这是管道cut
  • cut用于打印第二列之后的所有列(以空格分隔)。我们指定从 5 到行尾,因为这个词creating:前面有几个空格。我们希望使用所有列直到行尾,以防目录名称中有空格。最终输出为foo/.

  • 这是一个非常好的提示,但似乎以这种方式获取输出文件夹会以某种方式破坏解压缩过程。有没有办法在不破坏解压缩过程的情况下获取输出目录? (2认同)