如何找到包含特定文件或目录的目录?

如何找到包含特定文件或目录的目录?

我正在寻找一个单行命令来查找单个目录包含的多个文件或目录。

foo -> bar
    -> baz
    -> quux

temp -> bar

我想找到的只是foo因为它包含bar、、bazquux,但找不到temp

由于其他原因,我必须使用tcsh这个。

有什么建议么?

答案1

这应该可以满足您的要求,并且可以使用提供的数据

find . -type d -exec test -e '{}'/bar -a -e '{}'/baz -a -e '{}'/quux \;  -print

它基本上会找到目录,然后检查它们是否包含相关文件。如果包含,它会打印名称。它在 bash 和 tcsh 中工作。

答案2

一种方法是使用 ,特别是如果您需要多次查找此信息mlocate。安装 后mlocate,您必须运行sudo updatedb来填充索引数据库。未来的重新索引由每日 cron 作业触发(在许多流行的 Linux 发行版中默认配置)。

当您拥有最新的索引时,您可以运行如下查询:

locate -r '^/.*/foo/\(bar\|baz\|quux\)$'

上述命令将从根(/)向下搜索所有内容,并打印如下内容:

/home/foo/bar
/home/foo/baz
/var/lib/foo/quux
/usr/local/foo/bar

答案3

有多种方法可以定位文件。例如:找到名为“foo”的目录,并列出其中的所有内容:

find . -name "foo" -type d | xargs ls -la

另一个选项,如果你已经tree安装了命令(sudo apt-get install -y tree):

find . -name "foo" -type d | xargs tree -afi 

将为-afi您提供所有文件(-a)、完整文件路径(-f)并丢弃缩进(-i)。

答案4

尝试查找所有目录并查看它们是否包含您的三个文件/目录:

find -type d -print0 | xargs -0 -I@@ sh -c '[ -e @@/a ] && [ -e @@/b ] && [ -e @@/c ] && echo @@'

相关内容