我想在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
,或者只能编写我自己的函数吗?
感谢。
答案 0 :(得分:2)
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")