首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环中的zcat文件名展开

for循环中的zcat文件名展开
EN

Stack Overflow用户
提问于 2014-01-16 09:00:57
回答 1查看 946关注 0票数 0

我拿到了这些文件:

代码语言:javascript
复制
bonds.txt.gz
bonds_201307.txt.gz
bonds_201308.txt.gz
bonds_201309.txt.gz
bonds_201310.txt.gz
bonds_201311.txt.gz
bonds_201312.txt.gz

我有一个for循环来遍历这些文件,解压缩它们,并找到一个带有grep的字符串:

代码语言:javascript
复制
for f in `ls *.txt.gz`; do echo $f; zcat $f | grep MYBOND; done

如果我运行这个程序,我会得到以下信息:

代码语言:javascript
复制
bonds.txt.gz
zcat: bonds.txt.gz.gz: No such file or directory
bonds_201307.txt.gz
zcat: bonds_201307.txt.gz.gz: No such file or directory
bonds_201308.txt.gz
zcat: bonds_201308.txt.gz.gz: No such file or directory
bonds_201309.txt.gz
zcat: bonds_201309.txt.gz.gz: No such file or directory
bonds_201310.txt.gz
zcat: bonds_201310.txt.gz.gz: No such file or directory
bonds_201311.txt.gz
zcat: bonds_201311.txt.gz.gz: No such file or directory
bonds_201312.txt.gz
zcat: bonds_201312.txt.gz.gz: No such file or directory

看起来zcat正在用一个额外的.gz扩展文件名,但是当我尝试从命令行中提取一个文件名并完成它的工作时,它就不会这么做了。为什么在循环调用时会发生这种情况?

我知道我可以通过使用zgrep或find来达到同样的目的,但我仍然对理解zcat的这种行为感兴趣。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-16 09:13:17

我尝试了您的脚本,没有问题,但如果我设置alias ls='ls --color=always',我将有同样的问题

也许您的ls会返回一些隐藏字符,比如颜色代码。

你能试一下吗?

代码语言:javascript
复制
for f in `\ls *.txt.gz`

但你可以用

for f in *.txt.gz而不是

代码语言:javascript
复制
for f in `ls *.txt.gz`

如果您的系统有zgrep,可以使用zgrep MYBOND $f而不是zcat $f | grep MYBOND

代码如下:

代码语言:javascript
复制
for f in *.txt.gz; do echo "$f"; zgrep MYBOND "$f"; done
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21157323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档