gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:02 26 4
gpt4 key购买 nike

我想递归地列出 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com