tree
有一个-d
选项为“ List directories only.
”。但是,我似乎找不到“仅列出文件”的选项。我浏览了手册页,但似乎找不到仅列出文件的选项。
答案1
正如其他人在评论中所说,仅列出非目录并不完全符合命令的目的tree
。
但是,仅列出文件在当前目录下如果您像我一样并且更喜欢使用自定义的tree
over ls
(也许您甚至ls
使用tree
您喜欢的标志和参数别名),那么这并不罕见。
tree
利用和的组合grep
将得到你想要的:
$ tree -F
.
├── file1.txt
├── file5.txt
├── parent_dir1/
│ ├── child_dir/
│ ├── file2.txt
│ └── file3.txt
└── parent_dir2/
└── child_dir2/
└── file4.txt
4 directories, 4 files
$ tree -FL 1 | grep -v /$
.
├── file1.txt
├── file5.txt
2 directories, 1 file
“F”标志导致tree
将“/”附加到目录,而“v”标志则反转grep
给定的模式,该模式匹配所有以“/”结尾的行。
您会注意到,尽管目录实际上并未显示,但即使最后的摘要仍然适用。
一旦向下超过一级,树结构就会占主导地位,事情会变得有点奇怪。
$ tree -FL 3 | grep -v /$
.
├── file1.txt
├── file5.txt
│ ├── file2.txt
│ └── file3.txt
└── file4.txt
4 directories, 4 files
编辑
另外,如果这种损坏的树输出让您烦恼(即某些文件以“├─”字符而不是“└─”字符开头,并且多级版本似乎逐渐消失...... ),您可以通过首先对输出目录进行排序来解决此问题。
$ tree --dirsfirst -FL 1 | grep -v /$
.
├── file1.txt
└── file5.txt
2 directories, 1 file
$ tree --dirsfirst -FL 3 | grep -v /$
.
│ ├── file2.txt
│ └── file3.txt
│ └── file4.txt
├── file1.txt
└── file5.txt
4 directories, 5 files
我认为这实际上也使无节点树结构更具可读性。
答案2
考虑以下命令:
tree -ifF /usr/java/default/jre/lib/images | grep -v '/$'
/usr/java/default/jre/lib/images
/usr/java/default/jre/lib/images/cursors/cursors.properties
/usr/java/default/jre/lib/images/cursors/invalid32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_CopyNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_LinkNoDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveDrop32x32.gif
/usr/java/default/jre/lib/images/cursors/motif_MoveNoDrop32x32.gif
/usr/java/default/jre/lib/images/icons/sun-java_HighContrastInverse.png
/usr/java/default/jre/lib/images/icons/sun-java_HighContrast.png
/usr/java/default/jre/lib/images/icons/sun-java_LowContrast.png
/usr/java/default/jre/lib/images/icons/sun-java.png
2 directories, 12 files
-i
和参数-f
导致tree
在每行上输出完整路径,而不是缩进。该-F
参数导致它将 an 附加/
到目录名称中,目录名称将被倒置的 grep ( grep -v '/$'
) 过滤掉。
我经常使用它的一个变体来帮助我在运行其他命令时不耐烦地观察输出目录(及其子目录)的内容以了解活动...
watch exec "tree -ifFsD /var/local/myapp/data | grep -v '/$'"
答案3
答案4
旧线程,但作为 -F now(?) 附加不同的字符来显示文件类型:
-F
/' for directories, a
为套接字文件附加一个 =',*' for executable files, a
为门(Solaris)附加一个 >' 和一个“|”对于 FIFO,按照 ls -F
该命令可能会变成:
watch exec "tree -ifFsD /var/local/myapp/data | grep '[[:alnum:]]$\|\*'"