
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 tree
a 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 -f
opçã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á ActionListeener
a 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