如何使树只输出文件?

sti*_*kj1 9 tree

tree有一个-d选项“ List directories only.。但是,我似乎找不到“仅列出文件”的选项。我查看了手册页,但似乎找不到仅列出文件的选项。

小智 9

考虑以下命令:

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
Run Code Online (Sandbox Code Playgroud)

和参数导致在每行上输出完整-i路径,而不是缩进。该参数导致它将 an 附加到目录名称中,目录名称将被倒置的 grep ( ) 过滤掉。-ftree-F/grep -v '/$'

我经常使用它的一个变体来帮助我在运行其他命令时不耐烦地观察输出目录(及其子目录)的内容以了解活动...

watch exec "tree -ifFsD /var/local/myapp/data | grep -v '/$'"


Dan*_*ady 8

正如其他人在评论中所说,仅列出非目录并不完全符合tree命令的目的。

但是,如果您像我一样喜欢使用自定义的over (也许您甚至使用首选标志和参数别名to),那么仅列出当前目录中的文件并不少见。treelslstree

利用组合treegrep会得到你想要的东西:

$ 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
Run Code Online (Sandbox Code Playgroud)

'F' 标志导致tree将 '/' 附加到目录,而 'v' 标志用于grep反转给定模式,该模式匹配以 '/' 结尾的所有行。

您会注意到即使是最后的摘要仍然适用,尽管实际上并未显示目录。

一旦你向下一层以上,树结构就会占主导地位,事情就会变得有点奇怪。

$ tree -FL 3 | grep -v /$
.
??? file1.txt
??? file5.txt
?   ??? file2.txt
?   ??? file3.txt
        ??? file4.txt

4 directories, 4 files
Run Code Online (Sandbox Code Playgroud)

编辑

此外,如果这种破碎的树输出困扰您(即某些文件以“??”字符而不是“??”字符开头的事实,并且多级版本似乎逐渐减弱... ),您可以通过首先对输出目录进行排序来解决此问题。

$ 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
Run Code Online (Sandbox Code Playgroud)

我认为这实际上也使无节点树结构更具可读性。