¿Cómo uso el árbol para mostrar la ruta a los nombres de archivos que contienen una cadena en particular?

¿Cómo uso el árbol para mostrar la ruta a los nombres de archivos que contienen una cadena en particular?

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 treela 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 -fopció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á ActionListeeneren 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

información relacionada