现在我的方法是:
查找包含 a.txt 的目录
find -type f -iname "a.txt" | sed -r 's|/[^/]+$||' > a_paths.txt
Run Code Online (Sandbox Code Playgroud)查找包含 b.txt 的目录
find -type f -iname b.txt | sed -r 's|/[^/]+$||' > b_paths.txt
Run Code Online (Sandbox Code Playgroud)打印差异
comm -23 <(sort a_paths.txt ) <(sort b_paths.txt)
Run Code Online (Sandbox Code Playgroud)单线有什么有效的方法find吗?
如果您find支持-execdir并且-printf:
find . -name a.txt -execdir [ ! -e b.txt ] \; -printf %h\\n
Run Code Online (Sandbox Code Playgroud)
将查找名为 的文件a.txt,检查它们是否有同级b.txt文件,如果没有,则输出包含目录的名称。
没有-execdir或-printf:
find . -name a.txt -exec sh -c '
for file do
dir=${file%/*}
[ -e "$dir/b.txt" ] || printf "%s\n" "$dir"
done' sh {} +
Run Code Online (Sandbox Code Playgroud)
它的效率也更高,因为它不会为每个文件运行一个命令。