我需要在第一级列出包含扩展名为 .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)
如果您从 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)
或者没有basename和dirname:
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)