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
说明符将扩展为"."
.
xve*_*ges 29
在OS X和FreeBSD上,find
如果没有该-printf
选项,这将有效:
find . -name *.class -print0 | xargs -0 -n1 dirname | sort --unique
Run Code Online (Sandbox Code Playgroud)
的-n1
在xargs
从标准输入采取的每次调用参数设置为1的最大数量dirname
GNU找到
find /root_path -type f -iname "*.class" -printf "%h\n" | sort -u
Run Code Online (Sandbox Code Playgroud)