如何在Linux中使用一条find命令查找多个指定模式的文件?
使用find命令实现多模式文件查找
针对你需要匹配多个前缀开头文件的需求,这里提供几种实用的find命令写法:
方法1:用-o(逻辑或)组合多个-name条件
这是最直观的写法,每个前缀对应一个-name规则,用-o连接,注意括号需要转义避免shell解析:
find /目标目录路径 -type f \( -name "FCL_20230116*.zip" -o -name "VET_20230116*.zip" \)
-type f:确保只查找文件(排除目录)\( ... \):将多个条件组合为一个整体,保证逻辑或的优先级正确"前缀*.zip":匹配以前缀开头、后缀为zip的文件
方法2:使用正则表达式匹配
如果前缀数量较多,用正则表达式更简洁。find默认使用emacs风格正则,也可以指定扩展正则:
扩展正则写法(推荐)
find /目标目录路径 -type f -regextype posix-extended -regex ".*/(FCL_20230116|VET_20230116).*\.zip"
-regextype posix-extended:启用扩展正则,无需转义|.*:匹配任意长度的字符.*/:因为find的正则是匹配完整文件路径,所以开头需要匹配路径部分
默认emacs正则写法
find /目标目录路径 -type f -regex ".*/\(FCL_20230116\|VET_20230116\).*\.zip"
这里需要转义(、)和|,写法稍繁琐。
结合下载场景的用法
如果要直接将找到的文件下载到本地,可搭配xargs和scp:
find /远程服务器目录 -type f \( -name "FCL_20230116*.zip" -o -name "VET_20230116*.zip" \) | xargs scp 远程用户@服务器IP:/本地保存目录
内容的提问来源于stack exchange,提问作者nithinc
相关产品推荐
相关产品推荐

