我正在寻找一个单行命令,查找单个目录包含多个文件或目录。
foo -> bar -> baz -> quux temp -> bar
我期待只findfoo因为它包含bar , baz和quux ,但是找不到temp 。
由于其他原因,我不得不为此使用tcsh 。
有什么build议么?
这应该做你想要的,并与提供的数据一起工作
find . -type d -exec test -e '{}'/bar -a -e '{}'/baz -a -e '{}'/quux \; -print
它基本上查找目录,然后检查它们是否包含相关的文件。 如果他们这样做,打印名称。 它在bash和tcsh中工作。
这样做的一个方法,特别是如果你需要多次查找这些信息,那就是mlocate 。 安装mlocate ,您必须运行sudo updatedb来填充索引数据库。 未来的重新索引是由每天的cron作业触发的(在许多stream行的Linux发行版中默认configuration)。
当你有最新的索引时,你可以运行一个查询,例如:
locate -r '^/.*/foo/\(bar\|baz\|quux\)$'
上面的命令将search从根( / )下来的所有内容,并打印出如下内容:
/home/foo/bar /home/foo/baz /var/lib/foo/quux /usr/local/foo/bar
有几种方法来查找您的文件。 例如:find一个名为“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 ),完整的文件path( -f ),并放弃缩进( -i )。
尝试find所有的目录,看看它们是否包含你的三个文件/目录:
find -type d -print0 | xargs -0 -I@@ sh -c '[ -e @@/a ] && [ -e @@/b ] && [ -e @@/c ] && echo @@'