查找3位高管

时间:2016-09-07 08:23:17

标签: bash find exec

我写了这个命令:

find -exec test -e "{}/meta" ";" -exec du -h -t 500M {} ";"

检查文件meta是否在位,以及它的整个位置是否大于500MB。现在我想阅读这个meta文件的第一行。我试过这个

find -exec test -e "{}/meta" ";" -exec test du -h -t 500M {} ";" -exec sed '1q;d' {}/meta ";"

或者

find -exec test -e "{}/meta" ";" -exec du -h -t 500M {} ";" -exec head -n 1 {}/meta ";"

但它会忽略du并从每个meta文件中读取一行 应该怎么样?

3 个答案:

答案 0 :(得分:1)

我实际上会在bash中使用while循环,就像那样:

find -type d | \
    while IFS= read -r dir; do
        if (($(du -ms -- "$dir" | cut -f1) >= 500)); then
            [[ -e "$dir/meta" ]] && head -n1 "$dir/meta"
        fi
    done

我也不依赖于-t的{​​{1}}标志,因为它只影响输出,而不是`du的状态代码,所以我只是在bash中使用简单的算术比较。< / p>

答案 1 :(得分:1)

尝试使用find . -type d -size +500M后,似乎应用于目录的-size选项不会检查其总文件大小。

搜索所需文件并检查其目录大小应该是更好的方法:

find . -type f -name 'meta' -execdir bash -c 's=$(du -sh .); [[ "${s%M*}" -gt "500" ]] && sed "1q" meta' \;

答案 2 :(得分:0)

另一种方法是使用-execdir:

find -name meta -type f -execdir bash -c 's=($(du -s .)) ; (( s > 2000 ))'  \; -exec head -n1 {} \;