ls command: how can I get a recursive full-path listing, one line per file?
我如何让ls吐出一个递归的每行路径的平面列表?
例如,我只想要一个包含完整路径的文件列表:
1 2 3 4 5 6 7 | /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 |
使用find:
1 2 | find . find /home/dreftymac |
如果只需要文件(省略目录,设备等):
1 2 | find . -type f find /home/dreftymac -type f |
如果你真的想使用
1 2 3 4 | ls -R /path | awk ' /:$/&&f{s=$0;f=0} /:$/&&!f{sub(/:$/,"");s=$0;f=1;next} NF&&f{ print s"/"$0 }' |
如果要按修改时间对输出进行排序:
尝试以下更简单的方法:
1 | find"$PWD" |
最好的命令是:
要使用文件而不使用链接,您必须从输出中删除
1 | tree -fi |grep -v \> |
如果你想知道每个文件的性质,(例如只读取ASCII文件)有两个
1 2 3 4 5 6 7 8 | tree -fi | \ grep -v \> | \ while read first ; do file ${first} done | \ while read second; do echo ${second} | grep ASCII done |
哦,真的是一长串的答案。
它帮助了很多,最后,我创建了自己的,我正在寻找:
列出目录及其子目录中的所有文件:
1 | find"$PWD" -type f |
列出目录及其子目录中的所有目录:
1 | find"$PWD" -type d |
列出目录及其子目录中的所有目录和文件:
1 | find"$PWD" |
我不知道完整路径,但您可以使用
除ls外不使用外部命令:
1 2 3 | <wyn>ls -R1 /path | while read l; do case $l in *:) d=${l%:};;"") d=;; *) echo"$d/$l";; esac; done </wyn> |
1 | du -a |
对于某些找不到/找不到的有限设备外壳很方便。
找/将做的伎俩
我认为最好的方法是:
1 | find -D tree /fullpath/to-dir/ |
(或者为了将其保存在txt文件中)
1 | find -D tree /fullpath/to-dir/ > file.txt |
不要让它变得复杂。我刚用过这个并获得了很好的输出:
1 | ls -lR /path/I/need |
对于所有未来的人来说,最简单的方法就是:
1 | du |
但是,这也显示了每个文件夹中包含的内容的大小
您可以使用awk仅输出文件夹名称:
1 | du | awk '{print $2}' |
编辑 - 抱歉抱歉,我的不好。我以为这只是需要的文件夹。
我会把这个留在这里以防将来有人需要它...
有了使用所有可能的ls选项的自由:
以下是显示目录名称的部分答案。
1 | ls -mR * | sed -n 's/://p' |
说明:
通过迭代目录列表,我们也应该能够找到目录。还在努力。通过xargs获取通配符是一项挑战。
使用以下格式运行bash命令:
1 | find /path -type f -exec ls -l \{\} \; |
将通配符添加到ls目录的末尾会强制使用完整路径。现在你有这个:
1 2 3 4 5 6 7 | $ ls /home/dreftymac/ foo.txt bar.txt stackoverflow stackoverflow/alpha.txt stackoverflow/bravo.txt stackoverflow/charlie.txt |
你可以这样做:
1 2 3 4 5 6 7 8 | $ ls /home/dreftymac/* /home/dreftymac/. /home/dreftymac/foo.txt /home/dreftymac/bar.txt /home/dreftymac/stackoverflow: alpha.txt bravo.txt charlie.txt |
不幸的是,这不会打印递归目录的完整路径,因此它可能不是您正在寻找的完整解决方案。
我看到很多答案。这是我的,如果你在Mac上工作,我觉得非常有用。
我相信你知道有一些"捆绑"文件(.app,.rtfd,.workflow等)。看着Finder的窗口,他们似乎是单个文件。但他们不是。
1 | find . -not -name".*" -not -name"." | egrep -v"\.rtfd/|\.app/|\.lpdf/|\.workflow/" |
当然这是针对工作目录,你可以添加其他bundle的扩展(但总是在它们后面加上
相当有趣的"
如果目录作为相对路径传递,则需要在调用find之前将其转换为绝对路径。在以下示例中,目录作为第一个参数传递给脚本:
1 2 3 4 5 6 | #!/bin/bash # get absolute path directory=`cd $1; pwd` # print out list of files and directories find $directory |
1 | tar cf - $PWD|tar tvf - |
这很慢,但递归工作并打印目录和文件。如果你只想要没有所有其他信息/目录的文件名,你可以使用awk / grep来管道它:
1 | tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v"/$" |
@ ghostdog74:
对您的解决方案进行微调。
以下代码可用于搜索具有完整绝对路径的文件。
1 2 3 4 | 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] |
我知道文件名,但也想要目录。
找到$ PWD | fgrep文件名
在Mac OS 10.12.1中完美运行