是否有某种方法可以从 shell 中查找与文件模式匹配的所有文件,包括档案中的文件(具体来说:zip 档案)?
模拟包“VASP”生成名为“OUTCAR”的文件。这些文件现在分布在数百个文件夹中,大多数但不是全部,都经过压缩,以通过减少文件混乱来加快增量备份的速度。我现在想在所有这些压缩和非压缩的 OUTCAR 文件上运行脚本。
当然,我可以编写一个脚本,使用“find”来查找解压后的文件,并使用 find、grep 和 unzip 的组合来查找压缩文件,但如果有的话,最好使用标准解决方案,因为它允许在我的脚本中轻松地将 zip 文件视为只读文件夹。
理想情况下,会有一组命令模拟常见 shell 命令(如、cat
)grep
的行为find
,不同之处在于它们允许将 zip 文件作为文件名的一部分。
我不需要这样的工具来处理嵌套的 zip 文件。我从 切换.tar.gz
到 的真正原因.zip
是存在一个无需提取任何内容即可访问的文件索引(对于高压缩的 100 MB 档案,速度差异很大),而当涉及嵌套档案时,部分文件索引会丢失。
顺便说一句,我正在使用带有 Cygwin 的 Windows 7(尽管这只会对进程创建的性能产生影响)。
答案1
答案2
如果您使用的是 OSX,请尝试在名称前添加 az 的相同实用程序。它们将搜索压缩文件和非压缩文件。
从手册页中:
zgrep, zegrep, and zfgrep act like grep, egrep, and fgrep, respectively, but accept input files compressed with the compress(1) or gzip(1) compression utilities.
和
zcat is identical to gunzip -c.
在 Debian Linux 上
zgrep
是一个脚本包装器,它解压 zip 文件并通过它进行 grep,这样至少你不必自己编写它。
答案3
只需几分钟即可将 python os.walk 示例扩展为 a) 列出与您的模式匹配的文件(在文件列表上使用 re)和 b) 当遇到压缩/tared/etc 文件时,使用适当的库打开它们并对其中的文件名进行模式匹配。(抱歉,我得去上班了,所以不能为你写出来)。