为什么我的脚本中的文件大小值不正确?

时间:2014-01-29 17:54:21

标签: bash

我正在尝试在OS X上的bash脚本中获取文件的大小。如果我明确指定文件的名称,我会得到正确的答案。如果我尝试做这个循环的事情,我得到一个错误的答案。这个bash脚本是Automator中文件夹操作的一部分,我不需要显式设置名称,因为文件夹的内容会发生变化。

这给了我正确的答案:

function get_file_size {
    filesize1=$(stat -f%z "/Users/jcoulson/Nexus Transfer/Test.mpeg")
    echo $filesize1
}
for f in "/Users/jcoulson/Nexus Transfer/"
do
    get_file_size
done

这给了我136的回答:

function get_file_size {
    filesize1=$(stat -f%z "$f")
    echo $filesize1
}
for f in "/Users/jcoulson/Nexus Transfer/"
do
    get_file_size
done

编辑:问题必须是stat。如果我只是用echo "found something"代替get_file_size,我会看到文本回显。

3 个答案:

答案 0 :(得分:2)

变量没问题,但你忘记了*通配符,所以你的stat'ing目录而不是文件

function get_file_size {
    filesize1=$(stat -f%z "$f")
    echo $filesize1
}
for f in "/Users/jcoulson/Nexus Transfer/*"
do
    get_file_size
done

答案 1 :(得分:1)

我认为你想要的是

function get_file_size {
    filesize1=$(stat -f%z "$1")
    echo $filesize1
}
for f in "/Users/jcoulson/Nexus Transfer/"
do
    get_file_size $f
done

$ 1引用第一个参数,并且在get_file_size之后放置$ f将使用$ f作为第一个参数调用它

答案 2 :(得分:0)

对于将来磕磕绊绊的人,这是我完成的剧本:

function get_file_size {
    filesize1=$(stat -f%z "$f")
    echo $filesize1
}
for f in /Users/jcoulson/NexusTransfer/*
do
    get_file_size
done