【发布时间】:2022-01-21 10:17:18
【问题描述】:
我需要查找并删除空文件。在我的用例中,空文件的定义是一个零行的文件。
我确实尝试测试文件以查看它是否为空但是,这表现得很奇怪,因为即使文件为空它也没有检测到它。
因此,我能写出的最好的东西是下面的脚本,因为它必须测试几十万个文件,所以我太慢了
#!/bin/bash
LOOKUP_DIR="/path/to/source/directory"
cd ${LOOKUP_DIR} || { echo "cd failed"; exit 0; }
for fname in $(realpath */*)
do
if [[ $(wc -l "${fname}" | awk '{print $1}') -eq 0 ]]
then
echo "${fname}" is empty
rm -f "${fname}"
fi
done
有没有更好的方法来做我所追求的,或者,能否以带来更好性能的方式重写上述逻辑?
【问题讨论】:
-
find /root/directory -size 0c -delete? -
@Shawn 这是最好的解决方案,但不是 100% 相同。文件可以有零行 (
wc -l= 0),但可以多于0c。 -
@steffen。如何?你能想出一个例子吗?
-
空的定义也很奇怪。
-
grep -Pzq '\n' "$fname" && echo "line(s)" || echo "zero lines"