You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当find | xargs ls无返回结果时,如何避免自动执行ls .命令?

规避xargs空输入时默认执行命令的问题

问题原因

你遇到的是xargs的默认行为:当xargs没有从管道接收到任何输入参数时,会直接执行后续指定的命令,不为命令传入任何参数。而ls命令在没有接收任何路径参数时,默认会列出当前工作目录的内容,因此就出现了无匹配结果却返回当前目录列表的现象。

解决方法

  • 方法1:给xargs添加-r(--no-run-if-empty)参数
    这个是GNU xargs提供的专用参数,作用是当输入为空时,直接终止流程不执行后续命令,是最常用的解决方案,修改后命令如下:

    find /home/me/.config ! -user "me" -type f -print0 | xargs -0 -r ls -Al
    

    注:绝大多数Linux发行版自带的GNU版本xargs都支持该参数。

  • 方法2:使用find自带的-exec参数替代xargs
    这种方法不需要依赖xargs的特性,兼容性更强,跨平台(BSD/macOS/Windows WSL等)都可以正常使用,find匹配不到结果时不会执行ls命令:

    find /home/me/.config ! -user "me" -type f -exec ls -Al {} +
    
  • 方法3:给ls补充兜底参数(兼容所有场景的折衷方案)
    如果需要适配不支持-r参数的xargs环境,可以给ls命令增加/dev/null作为兜底参数,就算xargs没有传入任何匹配结果,ls也只会输出/dev/null的属性,不会列出当前目录内容:

    find /home/me/.config ! -user "me" -type f -print0 | xargs -0 ls -Al /dev/null
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:09:04