我有一个脚本,每次从 FTP 服务器下载 17 个文件,但有时由于某些原因,某些文件的重量为“0”。
所以我正在寻找一个 bash 脚本来检查是否有任何大小为零的文件。
我怎样才能做到这一点?
编辑:我想使用 if-else 语句:如果有任何 0 字节文件,我将不得不再次运行 bash 脚本。
答案1
如果您只想列出 0 字节文件,您可以使用find
:
使用示例find
:
$ find . -type f -size 0b
./4.txt
./5.txt
./6.txt
使用的优点find
是您可以轻松地通过管道xargs
对文件执行所需的操作(例如删除它们),这比使用循环容易得多for
。
如果您在找到这些文件后想要对其进行处理,例如删除所有 0 字节文件(同时考虑奇怪的文件名),我会执行以下操作:
$ find -type f -size 0b -print0 | xargs -0I file rm -v file
removed ‘./4.txt’
removed ‘./5.txt’
removed ‘./6.txt’
此外,还有另一种选择,即以人类可读的格式列出目录中的所有文件及其文件大小,使用du -h
。
使用示例du
:
$ du -h *
1.0K 1.txt
1.0K 2.txt
1.0K 3.txt
0 4.txt
0 5.txt
0 6.txt
编辑: 只要您知道如何找到空文件,您就可以通过多种方式执行其他操作。以下示例可能不是执行此操作的最佳方式,但如果您确实在寻找语句if/else
,那么您可以执行如下操作:
#!/bin/bash
for i in *; do
if [[ $(du -h "$i" | awk '{print $1}') = 0 ]]; then
echo "$i is empty."
else
echo "$i is not empty."
fi
done
返回:
1.txt is not empty.
2.txt is not empty.
3.txt is not empty.
4.txt is empty.
5.txt is empty.
6.txt is empty.