使用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
如果您只想查看文件内容,请-c
在gunzip
.
如果您在序列中丢失了文件,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 {} \;