0

我正在尝试编写一个条件语句,以便如果文件大于 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)不起作用。

我会很感激任何建议。

4

2 回答 2

2

因此,如果您还没有看过Advanced Bash Scripting Guide,那么您应该看过。是的,它专注于 Bash,但它也是此类条件的一个很好的参考。

现在,您所写的内容尝试stat -c %s $f > 1000000000作为命令执行(它在$()结构的括号内,据我了解,这相当于旧的反引号。您想要的是$(stat -c %s $f) -le 1000000000which 执行stat -c %s $f然后检查它是否小于或等于1000000000. 这(即a<=b)在逻辑上是等价的。!(a>b)

于 2013-08-19T20:14:16.443 回答
1

问题是“!$(stat -c %s $f > 1000000000)”不起作用。

您在命令中包含条件,即在 $(...) 中。说:

“!$(stat -c %s $f) > 1000000000”

于 2013-08-19T20:12:39.600 回答