如何使用find命令搜索文件名包含前导横杠的文件及目录
find命令搜索前导横杠文件名的解决方案
问题根因
你遇到的报错本质来自三个问题:
- shell通配符
*会先完成展开,你当前目录存在-x文件,find * -maxdepth 1 -type file展开后实际为find -x -maxdepth 1 -type file,find会把开头的-x识别为命令选项而非搜索路径,因此抛出非法选项错误。 - 你将
--放在命令末尾的写法无效,--的作用是终止后续内容的选项解析,放在末尾无法阻止前面展开的-x被识别为选项。 - 额外的语法错误:find命令
-type参数的普通文件取值为f,而非file,该写法也会触发报错。
可用解决方案(仅用find命令,无需其他工具)
方案1:显式指定搜索路径为当前目录(最推荐)
直接将搜索路径指定为./,完全规避通配符展开产生的前导横杠问题,命令如下:
# 仅搜索普通文件 find ./ -maxdepth 1 -type f
执行后会返回当前目录下所有普通文件,包含./-x和./x,符合需求。
如果需要同时搜索目录和文件,去掉-type f参数即可:
# 搜索当前目录下所有文件和目录 find ./ -maxdepth 1
方案2:将--放在通配符前终止选项解析
如果确实需要依赖通配符做前置匹配,可将--放在通配符前,让find把通配符展开的所有内容都识别为路径而非选项:
find -- * -maxdepth 1 -type f
该写法同样可以正确识别带前导横杠的文件名,返回-x和x的搜索结果。
内容的提问来源于stack exchange,提问作者Cyclonecode
相关产品推荐
相关产品推荐

