Como uso a árvore para mostrar o caminho para nomes de arquivos que contêm uma string específica?

Como uso a árvore para mostrar o caminho para nomes de arquivos que contêm uma string específica?

Eu tenho um sistema de arquivos bastante grande e digamos que desejo encontrar todos os arquivos e diretórios em uma determinada área do meu sistema de arquivos que contenham String ActionListeener, e para fazer isso eu quero usar tree. Então, se eu fizer:

tree ~/ | grep ActionListeener

O resultado será:

│   │   │           └── ActionListeener.class
│   │           └── ActionListeener.java

Agora sei que esses arquivos existem em algum lugar um pouco mais profundo no meu sistema de arquivos, mas não tenho ideia sobre qual pasta contém a subpasta, qual contém a subsubpasta e assim por diante, até os arquivos.

Então, realmente, minha pergunta é: como posso fazer com que o comando tree (talvez canalizando a saída para outra coisa) me mostre a pasta e o caminho que me levam aos arquivos específicos que contêm essa String?


Informações do sistema operacional:

Description:    Ubuntu 15.04
Release:    15.04

Informações do pacote:

tree:
  Installed: 1.7.0-3
  Candidate: 1.7.0-3
  Version table:
 *** 1.7.0-3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/universe amd64 Packages
        100 /var/lib/dpkg/status

Responder1

Use treea correspondência de padrões ( -P) em combinação com --prune:

$ tree
.
├── archlinux-simplyblack
│   ├── angle-down.png
│   ├── archlinux.png
# snip
    ├── reboot.png
    ├── shutdown.png
    └── theme.conf

8 directories, 78 files
$ tree -P 'reboot*' --prune            
.
├── maui
│   └── reboot.png
└── maui-dark
    └── reboot.png

2 directories, 2 files

Deman tree:

-P pattern
      List  only  those files that match the wild-card pattern.  Note:
      you must  use  the  -a  option  to  also  consider  those  files
      beginning   with  a  dot  `.'   for  matching.   Valid  wildcard
      operators are `*' (any zero or more characters), `?' (any single
      character),   `[...]'   (any  single  character  listed  between
      brackets (optional - (dash) for character range may be used: ex:
      [A-Z]),  and  `[^...]'  (any  single  character  not  listed  in
      brackets) and `|' separates alternate patterns.

--prune
      Makes  tree prune empty directories from the output, useful when
      used in conjunction with -P or -I.  See BUGS AND NOTES below for
      more information on this option.

Responder2

Use a -fopção de árvore. De man tree:

-f Imprime o prefixo do caminho completo para cada arquivo.

Então seu comando será:

tree -f ~/ | grep 'ActionListeener'

Observe que isso corresponderá ActionListeenera qualquer lugar da linha, portanto, seja preciso ao escolher em qual diretório você executará isso.

Responder3

Tentartree -P '<your_regex_or_file_name>' <tree_root_directory> --prune

No seu caso: tree -P 'ActionListeener' ~ --prune

informação relacionada