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; donels -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