
Tengo un sistema de archivos bastante grande y digamos que quiero encontrar todos los archivos y directorios en un área determinada de mi sistema de archivos que contienen la cadena ActionListeener
, y para hacer esto quiero usar tree
. Entonces si lo hago:
tree ~/ | grep ActionListeener
El resultado será:
│ │ │ └── ActionListeener.class
│ │ └── ActionListeener.java
Ahora sé que estos archivos existen en algún lugar un poco más profundo de mi sistema de archivos, pero no tengo idea de qué carpeta contiene la subcarpeta, cuál contiene la subsubcarpeta, etc., de los archivos.
Entonces, realmente mi pregunta es, ¿cómo puedo hacer que el comando de árbol (tal vez canalizando la salida a otra cosa) me muestre la carpeta y la ruta que me lleva a esos archivos en particular que contienen esa cadena?
Información del sistema operativo:
Description: Ubuntu 15.04
Release: 15.04
Información del paquete:
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
Respuesta1
Utilice tree
la coincidencia de patrones ( -P
) en combinación con --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.
Respuesta2
Utilice la -f
opción de árbol. De man tree
:
-f Imprime el prefijo de ruta completo para cada archivo.
Entonces tu comando será:
tree -f ~/ | grep 'ActionListeener'
Tenga en cuenta que esto coincidirá ActionListeener
en cualquier lugar de una línea, así que sea preciso al elegir en qué directorio lo ejecutará.
Respuesta3
Intentartree -P '<your_regex_or_file_name>' <tree_root_directory> --prune
En tu caso: tree -P 'ActionListeener' ~ --prune