我有一个始终具有相同名称的 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 ?