我如何吐出一行递归路径的平面列表?

例如,我只想要一个文件的完整路径的平面列表:

/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt

ls -a1几乎满足了我的需要,但我不想要路径片段,我想要完整的路径。


当前回答

如果你真的想使用ls,那么使用awk格式化它的输出:

ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'

其他回答

下面是显示目录名称的部分答案。

ls -mR * | sed -n 's/://p'

解释:

ls -mR *列出以':'结尾的完整目录名,然后分别列出该目录下的文件

Sed -n 's/://p'查找以冒号结尾的行,去掉冒号并打印该行

通过遍历目录列表,我们也应该能够找到目录。还在努力中。通过xargs获取通配符是一个挑战。

我不知道完整的路径,但你可以用-R来递归。或者,如果您不倾向于ls,您可以只查找*。

找到/就行了

realpath命令输出解析后的路径:

realpath *

为了包含点文件,将ls -a的输出管道到realpath:

ls -a | xargs realpath

递归列出子目录:

ls -aR | xargs realpath

如果文件名中有空格,man xargs建议使用-o选项来防止文件名被错误地处理,这与find -print0的输出效果最好,并且它开始看起来比其他答案复杂得多:

find -print0 |xargs -0 realpath

参见Unix和Linux的stackexchange问题如何列出一个目录中的所有文件与绝对路径。

我看到了很多答案。这是我的,如果你在Mac上工作,我觉得很有用。

我相信您知道有一些“包”文件(。App, .rtfd, .workflow等等)。查看Finder的窗口,它们似乎是单个文件。但事实并非如此。$ ls或$ find将它们视为目录…所以,除非你需要列出它们的内容,这对我来说是可行的:

find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"

当然,这是工作目录,你可以添加其他包的扩展名(但后面总是有一个/)。或者任何其他扩展,如果不是bundle没有/。

相当有趣的”。Lpdf /"(多语言pdf)。它有正常的“。pdf”扩展名(!!)或在Finder中没有。这样你就可以得到(或者只计算1个文件)这个pdf,而不是一堆东西…