如何用find命令查找与父目录同名的.fa文件
解决方法:匹配父目录名的.fa文件查找
我明白你要做的事啦——就是在Random1_fa这类目录里,精准找出Random1.fa这种和目录名去掉_fa后缀完全匹配的文件对吧?之前用管道传sed输出给find的思路没错,但因为find的-name参数不会读取标准输入,所以直接管道行不通,咱们换个方式来实现:
方法一:遍历当前目录下的_fa子目录(非递归)
如果你的_fa目录都在同一层级,用这个循环最直接:
for dir in ./*_fa/; do # 去掉目录名的_fa后缀,得到基础名称 base_name=$(basename "$dir" _fa) # 在目标目录里找匹配的.fa文件,-maxdepth 1表示只找当前目录不递归 find "$dir" -maxdepth 1 -name "${base_name}.fa" done
方法二:递归查找所有层级的_fa目录
如果你的_fa目录分散在不同子文件夹里,用这个嵌套find的写法:
# 先找出所有带_fa后缀的目录 find . -type d -name "*_fa" | while read -r target_dir; do base_name=$(basename "$target_dir" _fa) # 在每个找到的目录里搜索目标文件 find "$target_dir" -name "${base_name}.fa" done
为什么之前的方法没生效?
你之前尝试的ls | sed ... | find思路,问题出在find不会从标准输入读取匹配模式——它的-name参数需要直接给定字符串,管道传过去的内容find根本不会处理,所以用循环逐个处理每个目录才是正确的打开方式~
额外提示
- 如果目录名包含空格、特殊字符(比如
!@#),一定要用双引号包裹变量(比如"$dir"),避免命令出错 - 要是需要在
_fa目录的子文件夹里也找同名文件,去掉-maxdepth 1参数就行
内容的提问来源于stack exchange,提问作者K Y
相关产品推荐
相关产品推荐

