You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅将find命令的非空输出写入文件,无输出时不创建文件?

实现find命令非空输出才保存到文件的几种方法

这问题挺实用的,毕竟没人想留一堆空文件占地方对吧?我给你整理了几个靠谱的方案,按需选择就行:

方法一:用Shell变量+条件判断(无额外依赖)

先把find的结果存到变量里,判断变量非空时再写入文件,完全依赖Shell本身,兼容性拉满:

# 替换成你的find命令
search_result=$(find /your/target/path -type f -name "*.txt")

# 判断结果是否非空,是就写入文件
if [ -n "$search_result" ]; then
    echo "$search_result" > output.txt
fi

注意:如果你的find结果包含换行符,echo会正常保留;要是担心特殊字符,也可以用printf "%s" "$search_result"替代echo

方法二:用sponge工具(简洁高效)

如果你能安装第三方工具,sponge绝对是最省心的选择——它会先把所有输入读进内存,确认有内容才写入目标文件,空输入直接跳过不创建文件:

# 先安装moreutils包(包含sponge)
# Debian/Ubuntu: sudo apt install moreutils
# CentOS/RHEL: sudo yum install moreutils

# 直接管道给sponge就行
find /your/target/path -type f -name "*.txt" | sponge output.txt

方法三:临时文件中转(兼容所有场景)

要是不想装工具,也不想用变量(比如结果特别大怕占内存),可以用临时文件中转:

# 先把find结果写到临时文件
find /your/target/path -type f -name "*.txt" > temp_output.tmp

# 检查临时文件是否非空(-s选项判断文件大小大于0)
if [ -s temp_output.tmp ]; then
    # 非空就移到目标文件
    mv temp_output.tmp output.txt
else
    # 空的话直接删除临时文件
    rm temp_output.tmp
fi

内容的提问来源于stack exchange,提问作者Josef Klimuk

火山引擎 最新活动