如何使用来自不同目录的复合bash函数

时间:2015-11-06 14:23:56

标签: bash awk

我有一些目录,例如/ ice / cream包含一些我想要排序的文件,然后在最大的文件中找到一个最小值;但是我想从父目录/ ice中做到这一点。

我写的bash行只能在/ ice / cream中使用,我想从/ ice开始工作,我试过

awk 'BEGIN {min = 0} {if($7<min) min=$7} END {print min}' $(ls -lS cream/ | head -n 2 | awk '{print $9}')

这不起作用,因为awk不知道第二个$()函数找到的文件的路径;请帮忙!干杯

3 个答案:

答案 0 :(得分:1)

获取最大文件的更安全的方法;对stat的调用可能会因您的实施而异:

max_file () {
    local max_size size
    max_size=0
    for f in "$1"/*; do
        size=$(stat -c %s "$f")
        if (( size > max_size )); then
            max_file="$f"
            max_size="$size"
        fi
    done
    echo "$max_file"
}

awk '...' "$(biggest_file cream/)"

答案 1 :(得分:0)

您的ls管道太复杂了,在dir /之后需要*来获取相对名称输出:

awk 'BEGIN {min = 0} {if($7<min) min=$7} END {print min}' $(ls -S cream/* | head -1)

答案 2 :(得分:0)

正如@Etan Reisner在评论中首先回答的那样,该线路缺少了*;工作代码是:

awk 'BEGIN {min = 0} {if($7<min) min=$7} END {print min}' $(ls -lS cream/* | head -n 1 | awk '{print $9}')

谢谢。