查找条件的文件大小

时间:2013-08-19 20:06:20

标签: linux shell

我正在尝试编写条件语句,以便在文件大于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)无效。

我很感激任何建议。

2 个答案:

答案 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”