如何找到包含一个文件但不包含另一个文件的目录的路径?

Luk*_*asT 0 find files

现在我的方法是:

单线有什么有效的方法find吗?

Ste*_*itt 5

如果您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)

它的效率也更高,因为它不会为每个文件运行一个命令。