如何使用Bash回显包含匹配文件的目录?

Gru*_*eck 33 bash shell command-line grep find

我想写一个bash脚本,它将使用包含特定文件的所有目录的列表.我可以find用来回显每个匹配文件的路径.我只想列出包含至少一个匹配文件的目录的路径.

例如,给定以下目录结构:

dir1/
    matches1
    matches2
dir2/
    no-match
Run Code Online (Sandbox Code Playgroud)

命令(查找'matches*')仅输出路径dir1.

作为额外的背景,我使用它来查找包含Java .class文件的每个目录.

Joh*_*ica 59

find -name '*.class' -printf '%h\n' | sort -u
Run Code Online (Sandbox Code Playgroud)

来自man find:

-printf 格式

%h 文件名的前导目录(除最后一个元素外).如果文件名不包含斜杠(因为它在当前目录中),则%h说明符将扩展为".".

  • 很好,谢谢.对于复制粘贴:`find`在`find`后也需要一个目录,例如`find.-name'*.class'-printf'%h \n'| sort -u`从当前目录中搜索 (4认同)

xve*_*ges 29

OS XFreeBSD上,find如果没有该-printf选项,这将有效:

find . -name *.class -print0 | xargs -0 -n1 dirname | sort --unique
Run Code Online (Sandbox Code Playgroud)

-n1xargs从标准输入采取的每次调用参数设置为1的最大数量dirname

  • 在OSX上,你可以用homebrew安装gnu find:`brew install findutils`并使用它:`gfind.-name'*.class'-printf'%h \n'` (3认同)

gho*_*g74 7

GNU找到

find /root_path -type f -iname "*.class" -printf "%h\n" | sort -u
Run Code Online (Sandbox Code Playgroud)