如何查找目录及其子目录中的所有零字节文件?
我已经这样做了:
#!/bin/bash
lns=`vdir -R *.* $dir| awk '{print $8"\t"$5}'`
temp=""
for file in $lns; do
if test $file = "0"; then
printf $temp"\t"$file"\n"
fi
temp=$file
done
但是,我只得到当前目录中的结果,而不是子目录中的结果,
如果任何文件名包含空格,那么我只得到第一个单词,后跟制表符
要打印 $dir 中及以下大小为 0 的所有文件的名称:
find "$dir" -size 0
请注意,并非所有实现find
默认情况下会产生输出,因此您可能需要执行以下操作:
find "$dir" -size 0 -print
关于问题最后一个循环的两条评论:
您可以通过遍历行来部分消除空格问题,而不是遍历字符串中的每个其他单词并查看替代值是否为零。例如:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
请注意,如果 ls 输出的任何路径包含换行符,则在您的情况下这将失败,这强化了两点:不要解析ls
,并有一个合理的命名策略,不允许路径中出现空格。
其次,要从循环中输出数据,不需要将输出存储在变量中只是为了echo
它。如果您只是让循环将其输出写入 stdout,则可以完成相同的操作,但避免存储它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)