如何为find命令指定当前目录的上级搜索空间(反向maxdepth)?
解决find命令向上级目录搜索并排除当前子文件夹的问题
场景说明
当前工作目录:
/home/user/Bureau/Analyse/BCL_MDtest_haddock2/Analysis
目标文件(lig*.png)所在路径:
/home/user/Bureau/Analyse/BCL_MDtest_haddock2/!plots
需求:在当前目录的上级目录空间搜索目标文件,同时不遍历当前目录下的任何子文件夹。
方案一:从父目录开始搜索并排除当前目录
修改后的脚本如下:
# 要搜索的模式 lig="lig*" output=$(pwd) # 从当前目录的父目录启动搜索,排除当前目录,匹配后复制到当前目录 find ../ -path "./Analysis" -prune -o -name "${lig}*.png" -exec cp "{}" "${output}" \;
参数解释:
../:指定搜索起始点为当前目录的父目录(即/home/user/Bureau/Analyse/BCL_MDtest_haddock2),这就是你需要的“上级搜索空间”。-path "./Analysis" -prune:明确排除当前目录(Analysis),避免find遍历其下的所有子文件夹。-o:逻辑或,意为前面的排除条件不生效时,执行后续的文件匹配与复制操作。-name "${lig}*.png":匹配所有以lig开头的PNG文件。-exec cp "{}" "${output}" \;:将找到的文件复制到当前工作目录。
方案二:直接指定目标文件夹(更高效)
既然已经明确知道目标文件的所在文件夹,直接指定该路径搜索会更高效:
lig="lig*" output=$(pwd) # 直接在目标文件夹搜索,仅遍历该文件夹本身 find "/home/user/Bureau/Analyse/BCL_MDtest_haddock2/!plots" -maxdepth 1 -name "${lig}*.png" -exec cp "{}" "${output}" \;
参数解释:
-maxdepth 1:限制find仅搜索指定文件夹的一级内容,不进入其子文件夹。- 直接指定目标路径,避免无关目录的遍历,提升搜索效率。
原脚本问题说明
原命令中../../指向当前目录往上两级(即/home/user/Bureau/Analyse),结合-maxdepth 1只会搜索该目录下的一级子目录,无法定位到BCL_MDtest_haddock2/!plots中的目标文件,因此无法完成复制。
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

