在bash中列出大于100K的文件

时间:2016-08-14 22:50:47

标签: linux bash shell

我想在HOME目录中递归列出文件。我正在尝试编写自己的脚本,因此我不应该使用命令findls。我的剧本是:

#!/bin/bash

minSize=102400;

printFiles() {
    for x in "$1/"*; do
        if [ -d "$x" ]; then
            printFiles "$x";
        else
            size=$(wc -c "$x");
            if [[ "$size" -gt "$minSize" ]]; then
                echo "$size";
            fi
        fi
    done
}

printFiles "/~";

因此,问题在于,当我运行此脚本时,终端会抛出Line 11: division by 0/home/gandalf/Videos/*: No such file or directory。我没有按任何数字划分,为什么我会收到此错误?第二个?

或者,我无法使用findls因为我必须逐个显示文件,询问用户是否要查看下一个文件。这可以使用命令findls,或者只能编写我自己的函数吗?

感谢。

1 个答案:

答案 0 :(得分:2)

size=$(wc -c "$x");

这就是失败的路线。当您手动运行wc命令时,您应该能够看到原因:

$ wc -c /tmp/out
5 /tmp/out

输出不仅包含文件大小,还包含文件名。因此,您无法在下一行使用$size-gt比较器。解决此问题的一种方法是将wc行更改为使用cut(或awksed等)以保持文件大小。

size=$(wc -c "$x" | cut -f1 -d " ")

@ mklement0:

建议的更简单的替代方案
size=$(wc -c < "$x")