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

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

/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几乎满足了我的需要,但我不想要路径片段,我想要完整的路径。


当前回答

最好的命令是tree -fi

打印每个文件的完整路径前缀 -i不打印缩进

e.g.

$ tree -fi
.
./README.md
./node_modules
./package.json
./src
./src/datasources
./src/datasources/bookmarks.js
./src/example.json
./src/index.js
./src/resolvers.js
./src/schema.js

为了使用文件而不是链接,你必须从输出中删除>:

tree -fi |grep -v \>

如果你想知道每个文件的性质,(例如只读取ASCII文件)尝试while循环:

tree -fi |
grep -v \> |
while read -r first ; do 
    file "${first}"
done |
grep ASCII

其他回答

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问题如何列出一个目录中的所有文件与绝对路径。

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

不要把事情搞复杂。我只是使用这个,得到了一个漂亮的输出:

ls -lR /path/I/need

Ls -ld $(找到。)

如果你想根据修改时间对输出进行排序:

Ls -ltd $(查找。)

找到/就行了