找出一个目录中的所有含有某个文件的目录

一开始需求是找到一个目录中最底层的目录,比如说:

dir  
├── a.txt
└── sdir1
    ├── aa.txt
    └── sdir2
        └── aaa.txt

2 directories, 3 files  

上面这个 dir 目录,最底层的目录应该是 dir/sdir1/sdir2

想到的最简单的方法应该是 python 的 os.walk:

python -c 'import os;print "\n".join([x[0] for x in os.walk("dir") if not x[1]])'  

后来需求改了,要求找出 一个目录中所有含有某个文件的目录,这也很好办,改下上面的 python 命令:

# 假如是找 aa.txt 这个文件所在的目录
python -c 'import os;print "\n".join([x[0] for x in os.walk("dir") if "aa.txt" in x[2]])'  

最后来个 shell 版镇楼:

ls -lR dir | awk -vRS='\n\n' '{for(i=2;i<=NF;i++)if($i~/^aa\.txt$/){gsub(":","",$1);print $1;break}}'