在屏幕上提取 ZIP 的内容,但避免除文件名之外的额外信息

Extract ZIP's contents on screen but avoid extra information except of the file names

我正在寻找一个可以打印存档的所有内容(包括子文件夹及其文件)的命令,而无需将实际存档提取到磁盘上,而只在屏幕上显示。

我使用本网站的一些其他问题和答案取得了一些成就,这是我的命令:

unzip -l test.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}'

输出:

0 04-11-2009 13:43 jodconverter-webapp-2.2.2/ 1815 04-11-2009 13:43 jodconverter-webapp-2.2.2/README.txt 0 04-11-2009 13:43 jodconverter-webapp-2.2.2/src/ 5349 04-11-2009 13:42 jodconverter-webapp-2.2.2/src/jodconverter-webapp-2.2.2-sources.jar 26436 04-11-2009 13:43 jodconverter-webapp-2.2.2/LICENSE.txt 3819 04-11-2009 13:43 jodconverter-webapp-2.2.2/ChangeLog.txt 3314202 04-11-2009 13:42 jodconverter-webapp-2.2.2/jodconverter-webapp-2.2.2.war

如您所见,输出只有一行,其中包含一些我并不真正需要的额外信息。

我想要这样的输出:

jodconverter-webapp-2.2.2/
jodconverter-webapp-2.2.2/README.txt
jodconverter-webapp-2.2.2/src/
jodconverter-webapp-2.2.2/src/jodconverter-webapp-2.2.2-sources.jar
.
.
.

所以我不仅想只输出文件名(及其完整路径)并避免任何额外的其他信息,如 time permissions 等等,而且我还想使用一些东西喜欢break-line来区分不同的文件。

记住这个命令会运行在一个PHP文件上获取文件的内容,所以我不知道这是否可以帮助我们使用<br> 做换行。

单条命令可以吗?

好吧,我想不出一个命令可以 return 你返回你需要的输出,但也许其他人可以知道更多。

在你的情况下我会做的是将线拆分成数组并使用它直到你得到你想要的。

您实际上必须找到一种适用于所有情况的模式。 简要查看命令的输出后,我做出了以下决定:

  1. 您使用 space (即 explode() )
  2. 作为分隔符来拆分行
  3. 我能看到的模式是 xx:xx 形式的时间恰好在实际 file/directory 之前!因此,您可以使用正则表达式检查当前行是否是基于 24 的有效时间,这意味着如果是这种情况并且您位于数组的 $i 位置,则 $i+1 就是您的位置正在寻找,因此您可以将其复制到新数组。
  4. 重复

我认为这有点痛苦,但至少是一个解决方案。