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

标签 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 还是只能通过编写我自己的函数来完成?

谢谢。

最佳答案

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")

关于linux - 在 bash 中列出大于 100K 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38947302/

相关文章:

linux - 在 bash 中使用 sed 覆盖同一个文件

linux - 设置后是否具有 find static 变量?

bash - 如何在fish shell中隐藏某些扩展名的文件?

regex - AWK Regex 查找特定模式

linux - 找到模式时将行转为列

linux - Q : Bash script infinite loop causing ffmpeg spam

linux - Bash 脚本变量解释

linux - 对脚本中的这一行感到困惑

linux - 在 Linux 的脚本环境中解密变量

bash - 为什么使用 sed 命令不起作用?