我正在尝试编写条件语句,以便在文件大于1GB时,在文件中打印该文件的名称,并跳过处理。
#!/bin/bash
for f in *.dmp
do
if [ ! $(stat -c %s $f > 1000000000) ]; then
name=`basename ${f%.dmp}`
if [ -f ../tshark/$name.dat ]; then
echo "file exists, moving on...";
else
echo "Processing" $name;
tshark -PVx -r "$f" > ../tshark/$name.dat;
echo $name "complete, moving on...";
fi
else
echo $f "too large";
echo $f "\n" > tooLarge.txt;
fi
done
问题是! $(stat -c %s $f > 1000000000)
无效。
我很感激任何建议。
答案 0 :(得分:2)
所以,如果你还没有看到Advanced Bash Scripting Guide,你应该这样做。是的,它专注于Bash,但对于像这样有条件的事情,它也是一个很好的参考。
现在,你所写的内容尝试执行stat -c %s $f > 1000000000
作为一个命令(它位于$()
构造的parens里面,这相当于旧的反引号,据我所知。你想要的是$(stat -c %s $f) -le 1000000000
stat -c %s $f
,然后检查它是否小于或等于1000000000
。这个(即a<=b
)是equivalent的{ {1}}逻辑上。
答案 1 :(得分:1)
问题是“!$(stat -c%s $ f&gt; 1000000000)”无效。
您在命令中包含条件,即在$(...)内。说:
“!$(stat -c%s $ f)&gt; 1000000000”