如何仅解压缩遵循指定模式的某些文件?

如何仅解压缩遵循指定模式的某些文件?

使用bash。

考虑到我有一个包含以下文件的目录 D:

20170301:00.out.gz
20170301:01.out.gz
...
20170302:01.out.gz
20170302:02.out.gz

etc.

这些文件遵循“yyyymmdd:hh”(年、月、日、小时)模式。使用 bash,我只想解压缩其中几个文件,但我还不知道该怎么做。

对于一个文件,我当然可以使用“gunzip -c yyyymmdd:hh.out.gz”,但是对每个文件进行硬编码似乎有点不必要......

例如,如果我只想解压 3 月 7 日到 3 月 14 日期间的文件,我应该如何处理?

答案1

由于您使用的是 Bash,因此您可以使用它大括号扩展:

gunzip {20170307..20170314}*.gz

如果您只想查看文件内容,请-cgunzip.

如果您在序列中丢失了文件,gunzip则会抱怨它们,但它仍然会处理所有文件存在于序列中。在这种情况下,还值得注意的是,如果设置了 shell 选项,扩展本身将会失败failglob,但这不是 Bash 中的默认设置。

答案2

gunzip -c只会将内容写入标准输出,而不是实际解压缩它们。

为了您的目的:

for a in {07..14}; do gunzip -c '201703'$a':02.out.gz'; done

答案3

find方法:

find . -maxdepth 1 -type f -regextype posix-egrep \
-regex ".*/201703(0[7-9]|1[0-4]):[0-5][0-9]\.out\.gz$" -exec gunzip {} \;

相关内容