我有一个相当大的文件系统,假设我想在文件系统的某个区域找到包含字符串 的所有文件和目录ActionListeener
,为此我想使用tree
。所以如果我这样做:
tree ~/ | grep ActionListeener
其结果将是:
│ │ │ └── ActionListeener.class
│ │ └── ActionListeener.java
所以我现在知道这些文件确实存在于我的文件系统更深层的某个地方,但我不知道哪个文件夹包含子文件夹,哪个文件夹包含子子文件夹,等等,以及这些文件。
所以我真正的问题是,我如何才能让 tree 命令(通过将输出传输到其他命令)向我显示引导我找到包含该字符串的特定文件的文件夹和路径?
操作系统信息:
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
使用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.
答案2
使用-f
树的选项。来自man tree
:
-f 打印每个文件的完整路径前缀。
因此你的命令将是:
tree -f ~/ | grep 'ActionListeener'
请注意,这将匹配ActionListeener
行中的任何位置,因此请精确选择在哪个目录中运行它。
答案3
尝试tree -P '<your_regex_or_file_name>' <tree_root_directory> --prune
就你的情况而言: tree -P 'ActionListeener' ~ --prune