列出包含具有特定扩展名的文件的所有目录

Gok*_*N K 1 linux grep

我需要在第一级列出包含扩展名为 .info 的文件的所有目录。

  --contrib
     --abc
       --ab.info 
     --def
       --de.info 
     --xyz
       --ab.gh
       --ab.ij
Run Code Online (Sandbox Code Playgroud)

该命令应该列出

abc, def
Run Code Online (Sandbox Code Playgroud)

Jak*_*ski 6

如果您从 contrib 目录运行它,这应该可以工作:

find . -maxdepth 2 -name "*.info" -exec dirname {} \;
Run Code Online (Sandbox Code Playgroud)

如果你真的想从 contrib 的父级运行它,它需要更多的调整。

以上将为您提供:

./abc
./def
Run Code Online (Sandbox Code Playgroud)

这不完全是您想要的。所以也许更像这样的事情会有所帮助:

find . -maxdepth 2 -name "*.info" -exec sh -c 'F=$(dirname {}) ; basename $F' \;
Run Code Online (Sandbox Code Playgroud)

它更复杂,但结果是:

abc
def
Run Code Online (Sandbox Code Playgroud)

或者没有basenamedirname

find . -maxdepth 2 -name "*.info" -exec bash -c '[[ {} =~ .*/(.*)/.* ]] && echo ${BASH_REMATCH[1]}' \;
Run Code Online (Sandbox Code Playgroud)

或与sed

find . -maxdepth 2 -name "*.info" -exec echo {} + | sed 's|./\(\S*\)/\S*|\1,|g'
Run Code Online (Sandbox Code Playgroud)

结果:

abc, def, 
Run Code Online (Sandbox Code Playgroud)