ls命令:我怎样才能得到一个recursion的全path列表,每个文件一行?

我怎样才能让ls吐出一个recursion的一行一行的path列表?

例如,我只想要一个完整path的文件列表:

/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几乎做我需要的,但我不想要path碎片,我想要完整的path。

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

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

使用find:

 find . find /home/dreftymac 

如果你只想要文件(省略目录,设备等):

 find . -type f find /home/dreftymac -type f 

ls -ld $(find .)

如果你想按修改时间sorting你的输出:

ls -ltd $(find .)

尝试以下更简单的方法:

 find "$PWD" 

最好的命令是: tree -fi

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

 tree -fi |grep -v \> 

如果你想知道每个文件的性质,(例如只读ASCII文件),两个s:

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

我不知道完整path,但是可以使用-Rrecursion。 另外,如果你不是在ls ,你可以find *

除ls之外不使用外部命令:

ls -R1 /path | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
ls -R1 /path | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done 
 du -a 

方便的一些有限的设备shell查找/定位不可用。

发现/将做的伎俩

对于未来所有人来说,最简单的方法就是:

 du 

但是,这也显示了每个文件夹中包含的内容的大小您可以使用awk输出文件夹名称:

 du | awk '{print $2}' 

编辑 – 对不起,对不起。 我认为这只是需要的文件夹。 生病离开这里,以防万一以后有人需要它…

有了使用所有可能的ls选项的自由:

find -type f | xargs ls -1

我认为最好的方式是:

 find -D tree /fullpath/to-dir/ 

(或者为了将其保存在txt文件中)

 find -D tree /fullpath/to-dir/ > file.txt 

哦,真是一个长长的答案。 它帮了我很多,最后我用自己创造了我想要的东西:

列出目录及其子目录中的所有文件:

 find "$PWD" -type f 

列出目录及其子目录中的所有目录:

 find "$PWD" -type d 

列出目录及其子目录中的所有目录和文件:

 find "$PWD" 

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

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

说明:

ls -mR *列出以“:”结尾的完整目录名称,然后单独列出该目录中的文件

sed -n 's/://p'查找以冒号结尾的行,剥离冒号并打印行

通过迭代目录列表,我们也应该能够find目录。 仍然在工作。 通过xargs获得通配符是一个挑战。

使用以下格式运行bash命令:

 find /path -type f -exec ls -l \{\} \; 

ls -lR就是你要找的东西,至less我是。 干杯

将通配符添加到ls目录的末尾将强制完整path。 现在你有这个:

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

你可以这样做:

 $ ls /home/dreftymac/* /home/dreftymac/. /home/dreftymac/foo.txt /home/dreftymac/bar.txt /home/dreftymac/stackoverflow: alpha.txt bravo.txt charlie.txt 

不幸的是,这不会打印recursion到的目录的完整path,所以它可能不是您正在寻找的完整解决scheme。

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

我相信你知道有一些“捆绑”文件( .app.rtfd.workflow等)。 看着Finder的窗户,他们似乎是单一的文件。 但他们不是。 $ ls$ find将它们视为目录…所以,除非你需要列出它们的内容,否则这适用于我:

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

当然,这是为工作目录,你可以添加其他包的扩展(但总是与/后)。 或者其他任何扩展,如果没有捆绑的/没有。

相当有趣的“ .lpdf/ ”(多语言pdf)。 它在Finder中具有普通的“ .pdf ”扩展名(!!)或者没有。 这样你得到(或只是计数1文件)这个pdf而不是一堆东西…

如果该目录作为相对path传递,则在调用find之前,需要将其转换为绝对path。 在以下示例中,该目录作为第一个parameter passing给脚本:

 #!/bin/bash # get absolute path directory=`cd $1; pwd` # print out list of files and directories find $directory 
 tar cf - $PWD|tar tvf - 

这很慢,但recursion地工作并打印目录和文件。 你可以用awk / grep来pipe理它,如果你只想要没有其他所有info /目录的文件名:

 tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$" 

@ ghostdog74:对你的解决scheme做一点小小的调整。
以下代码可用于以完整绝对pathsearch文件。

 sudo ls -R / | awk '<br/> /:$/&&f{s=$0;f=0}<br/> /:$/&&!f{sub(/:$/,"");s=$0;f=1;next}<br/> NF&&f{ print s"/"$0 }' | grep [file_to_search] 

我知道文件名,但也想要目录。

find$ PWD | fgrep文件名

在Mac OS 10.12.1中完美工作

不要让它变得复杂。 我只是用这个,得到了一个漂亮的输出:

 ls -lR /path/I/need