Как я могу использовать дерево, чтобы показать путь к именам файлов, содержащих определенную строку?

У меня довольно большая файловая система, и скажем, что я хочу найти все файлы и каталоги в определенной области моей файловой системы, которые содержат строку ActionListeener, и для этого я хочу использовать tree. Итак, если я сделаю:

tree ~/ | grep ActionListeener

Результат будет:

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

Так что теперь я знаю, что эти файлы существуют где-то немного глубже в моей файловой системе, но у меня нет представление о том, какая папка содержит подпапку, в которой находится подпапка и т. д. к файлам.

Так что на самом деле мой вопрос, как я могу получить команду дерева (возможно, передавая выходные данные чему-то другому), чтобы показать мне папку и путь, который ведет меня к тем конкретным файлам, которые содержат эту строку?


Информация об ОС:

Description:    Ubuntu 15.04
Release:    15.04

Информация о пакете:

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
1
задан 23 May 2015 в 19:37

3 ответа

Используйте tree сопоставление с образцом (-P) в сочетании с --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

От man 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.
0
ответ дан 23 May 2015 в 19:37

Используйте -f опция дерева. От man tree:

Печать-f префикс полного пути для каждого файла.

, Таким образом, Ваша команда будет:

tree -f ~/ | grep 'ActionListeener'

Примечание, которому это будет соответствовать ActionListeener где угодно в строке, так быть точным в выборе, в котором каталоге Вы выполните это.

0
ответ дан 23 May 2015 в 19:37

Попробуйте tree -P '' --prune

В вашем случае: tree -P 'ActionListeener' ~ --prune

-1
ответ дан 27 February 2020 в 14:30

Другие вопросы по тегам:

Похожие вопросы: