这是我用来解压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
答案 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