如何为Linux find命令设置默认自动携带-mount(等效-xdev)参数
Ubuntu下find默认自动携带-mount参数的最简实现方案
核心前置认知
你之前认为-mount必须放在搜索路径后方、因此无法用别名实现的判断,是基于严格POSIX find的语法要求,但Ubuntu默认搭载的GNU find对全局查找选项的位置没有强制约束:
- 无论把
-mount放在参数列表最开头、路径之后、还是表达式最后,GNU find都能正确识别其作用,运行效果完全一致 - 可以直接在终端测试验证:执行
find -mount /boot -name "*.cfg"会正常运行,不会因为-mount在路径前面就报错,不存在“参数位置不规范就无法执行”的问题,因此完全不需要编写复杂的参数位置解析逻辑来插入-mount参数
可直接落地的实现选项
1. 零成本基础方案(适合无跨挂载搜索需求的场景)
直接在当前用户的shell配置文件(~/.bashrc 或 ~/.zshrc)中添加命令别名:alias find='find -mount'
配置完成后执行source ~/.bashrc生效,所有交互场景下手动输入的find命令,都会自动开启跨挂载点的限制,不需要再手动加-mount参数。
2. 带临时绕过机制的增强方案(兼顾日常使用和特殊需求)
如果偶尔需要执行跨多个挂载点的find搜索,直接用shell内置函数替代别名,实现逻辑比你原本计划的“识别路径位置插入参数”简单得多,完全不需要复杂的参数解析:
# 将以下函数写入~/.bashrc后执行source ~/.bashrc即可生效 find() { # 遇到临时需要跨挂载搜索的场景,传入--no-mount标识即可跳过默认限制 if [[ " $* " =~ " --no-mount " ]]; then # 剔除临时标识,调用系统原生find command find "${@/--no-mount/}" else # 默认给所有find调用带上-mount参数,位置不影响GNU find运行效果 command find -mount "$@" fi }
这套实现的优势:
- 没有复杂的参数拆分、路径识别逻辑,完全利用GNU find的选项位置容错特性
- 日常使用时,执行普通的find命令(比如
find /var -name "*.log")会自动等效为find -mount /var -name "*.log",自动避免跨文件系统搜索带来的性能损耗 - 真需要跨挂载点搜索时,只需要在命令中加
--no-mount标识(比如find --no-mount / -name "temp.file"),就可以完全跳过默认的-mount限制,不需要手动输入find的全路径来绕开封装
注意事项
- 这套方案仅作用于当前用户的交互shell环境,不会影响系统内部脚本调用的原生find,不会造成系统行为异常
- 方案适配Ubuntu默认的GNU find环境,如果切换到BSD系的轻量find版本,才需要额外增加参数位置的判断逻辑
内容的提问来源于stack exchange,提问作者IpsRich
相关产品推荐
相关产品推荐

