对于我在'ls | grep`问题中的问题

时间:2010-07-12 08:21:35

标签: unix grep tar

这是我用来解压tar文件内容的文件grep然后删除未修改文件的代码。我没有足够的空间来同时解压所有文件。

我遇到的问题是`ls |中的f为 grep -v * .gz 这行应该是找到tar出来的文件,并且可以通过没有.tar.gz扩展名来识别,但它似乎没有把它们拿起来?

非常感谢任何帮助

中号

for i in *.tar.gz; 
do echo $i >>outtput1; 
     tar -xvvzf $i; mv $i ./processed/; 
     for f in `ls | grep -v *.gz`;  ----- this is the line that isn't working
     do echo $f  >> outtput1; 
     grep 93149249194 $f >> 
     outtput1; grep 788 $f >> outtput1; 
     rm -f $f; 
     done; 
done

3 个答案:

答案 0 :(得分:3)

试试ls -1 | grep -v "\\.gz$"-1会使ls每行输出一个结果。我也在几个方面修复了你的正则表达式。

虽然解决这一问题的更好方法是使用find -exec

答案 1 :(得分:0)

将其更改为ls | grep -v "*.gz",您必须引用*.gz,否则它只会对工作目录中的文件进行全局处理并对其进行grep。

答案 2 :(得分:0)

切勿在脚本中使用ls,也不要使用grep来匹配文件模式。改为使用globbing和测试:

for f in *
do
    if [[ $f != *.gz ]]
    then
        ...
    fi
done