使用find
,我将检查目录中是否存在任何最小大小为 1 字节的文件in
,如果不存在则退出。
我尝试过类似的东西,但它不起作用
find ./in/ -type f -iname '*' -size 1c &> /dev/null
if [ "$?" != 0 ]
then
echo file size is under 1 byte, aborting...
fi
使用find
,我将检查目录中是否存在任何最小大小为 1 字节的文件in
,如果不存在则退出。
我尝试过类似的东西,但它不起作用
find ./in/ -type f -iname '*' -size 1c &> /dev/null
if [ "$?" != 0 ]
then
echo file size is under 1 byte, aborting...
fi
使用 GNU
find
:使用 zsh 代替 bash:
如果除了进行该测试之外,您还想获取数组中的非空文件列表,以便稍后在脚本中处理它,在 bash 4.4+ 中:
oN
在 zsh 中(额外的好处是文件列表会被排序;如果你不关心顺序,你可以使用限定符跳过排序):如果没有
N
限定符,则 zsh 会在没有匹配项时自动退出并显示错误消息。如果你想输出自己的错误消息,可以像在 bash 中一样执行关于您的方法的一些注意事项:
-iname '*'
没有意义,它匹配名称(不区分大小写!?)由任意数量的字符组成的文件,因此除了文件名可能由非字符组成的病理情况外,它应该匹配所有文件,因此可以省略。-size 1c
匹配大小恰好为 1 字节的文件(c
这是字符的旧含义,c
因为字符总是由一个字节组成)。您需要-size +0c
至少有 1 个字节的文件。-size +0
对于大小四舍五入到下一个 512 字节单位大于 0 的文件,这里也可以使用。find
当遇到无法找到文件的错误时返回非零退出状态,而不是当使用提供的过滤表达式找不到文件时返回非零退出状态。cmd...; if [ "$?" != 0 ]
您可以使用而不是if ! cmd...
(顺便说一下,!=
用于字符串比较; 用于十进制整数比较(例如,与 进行比较时会有所不同00
,0
因此这里不介绍),您可以改用-ne
)。echo file size is under 1 byte, aborting...
没有正确描述未找到非空文件时发生的情况。