我想递归地列出 HOME
目录中的文件。我正在尝试编写自己的脚本,所以我不应该使用命令 find
或 ls
。我的脚本是:
#!/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
。我没有除以任何数字,为什么会出现此错误?。第二个呢?
或者,我不能使用 find
或 ls
,因为我必须一个一个地显示文件,询问用户是否要查看下一个文件或不是。这可以使用命令 find
或 ls
还是只能通过编写我自己的函数来完成?
谢谢。
最佳答案
size=$(wc -c "$x");
那是失败的行。当您手动运行该 wc
命令时,您应该能够看到原因:
$ wc -c /tmp/out
5 /tmp/out
输出不仅包含文件大小,还包含文件名。因此,您不能在下一行将 $size
与 -gt
比较器一起使用。解决此问题的一种方法是更改 wc
行以使用 cut
(或 awk
或 sed
等) 以保持文件大小。
size=$(wc -c "$x" | cut -f1 -d " ")
@mklement0 建议的更简单的替代方案:
size=$(wc -c < "$x")
关于linux - 在 bash 中列出大于 100K 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38947302/