在当前目录中查找空文件的脚本?

在当前目录中查找空文件的脚本?

我正在尝试编写一个脚本,它可以在当前目录中搜索空文件,然后对空文件进行计数。我还希望输出中每行一个文件。例如,程序输出将如下所示:

空文件是:
文件1.pdf
文件4.cpp
示例文件
空文件数量:3

答案1

如果你不需要递归(即进入/计算子目录内的空文件),那么你可以使用标准文件测试,例如

n=0
for f in *; do 
  [[ -f "$f" ]] && [[ ! -s "$f" ]] && { echo "$f"; ((n++)); } 
done 
echo "Number of empty files: $n"

help test

  -f FILE        True if file exists and is a regular file.
  -s FILE        True if file exists and is not empty.

答案2

空文件的大小通常为零。因此,运行以下脚本将有助于找到空文件

find /home/ -type f -size oc -exec ls {} \;

您可以使用以下单位:

b – for 512-byte blocks (this is the default if no suffix is used)
c – for bytes
w – for two-byte words
k – for Kilobytes (units of 1024 bytes)
M – for Megabytes (units of 1048576 bytes)
G – for Gigabytes (units of 1073741824 bytes)

我创建了一些空文件并将其保存在以下目录中

/home/um/Documents/hello

现在让我们看看我创建的所有空文件

cd /home/um/Documents/hello此命令将目录更改为 hello

ls -sh它以可读的格式列出所有文件,包括其大小 /home/um/Documents/hello

16K 空.odt 12K 空.pdf 8.0K 空.txt 16K excel.ods

但是这些文件的大小在 0 - 20 kb 范围内,我确定这些文件是空的

因此可以根据大小对所有文件进行排序。

find /home/um/Documents/hello -type pdf -size -20k -exec ls -lh {} \;

它对所有小于 20kb 的文件进行排序

答案3

您可以使用find命令查找空文件

find . -maxdepth 1 -type f -empty | tee /dev/tty | wc -l

在哪里

  • -maxdepth 1仅查看当前目录,不查看子目录
  • -type f仅查找文件,不查找目录
  • -empty检查空文件
  • tee /dev/tty发送文件名到终端和 wc
  • wc -l统计文件数量

请参阅man find以了解更多信息。

相关内容