解压缩并将输出名称存储在变量上

解压缩并将输出名称存储在变量上

我有一个始终具有相同名称的 zip 文件:toto.zip 里面只有 1 个文件,其名称可以根据版本进行更改:totoInstaller-20210321_titi.pkg

我想从 shell 脚本中提取提取文件的名称(我在 macOS 上)并将其存储在变量中以便稍后使用...我所做的一切都不起作用...感谢任何帮助。

答案1

filename=$(unzip toto.zip | awk 'sub(/^[[:space:]]*inflating:[[:space:]]+/,""){print; exit}')

应该使用任何 awk 都能稳健且高效地工作(但未经测试)。还可以考虑对 的输出执行类似的操作unzip -l

答案2

这应该可行(尽管有时,一个系统到另一个系统的版本sed和可用版本之间存在差异):unzip

filename=$(unzip toto.zip | sed -n 's/^[[:space:]]*inflating:[[:space:]]*//p')

此命令解压缩文件并将输出发送到sed.sed查找以空格开头然后以 开头的行inflating:。如果找到这样的行,sed 将删除所有内容,包括inflating:和任何后续的空格,然后打印剩下的内容,这应该是文件名。其他一切都被丢弃(感谢 option -n)。最后,我们将输出存储在变量中filename

答案3

谢谢, sed 和 awk 都可以工作,即使它们都在末尾留有额外的空间来修剪

为什么在这里使用 unzip -l ?

相关内容