我怎样才能得到LS吐出的递归一个每行路径的简单列表?
举例来说,我只是想与他们的完整路径文件的扁平上市:
/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
几乎做什么,我需要的,但我不想路径片段,我要完整路径。
Answer 1:
如果你真的想用ls
,然后用awk格式化输出:
ls -R /path | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'
Answer 2:
使用发现:
find .
find /home/dreftymac
如果你只想要的文件(省略目录,设备等):
find . -type f
find /home/dreftymac -type f
Answer 3:
ls -ld $(find .)
如果你想通过修改时间你的输出进行排序:
ls -ltd $(find .)
Answer 4:
Answer 5:
最佳的命令是: tree -fi
为了使用这些文件而不是链接,你必须删除>
从你的输出:
tree -fi |grep -v \>
如果你想知道每个文件的性质,(例如读取只ASCII文件)有两个while
S:
tree -fi | \
grep -v \> | \
while read first ; do
file ${first}
done | \
while read second; do
echo ${second} | grep ASCII
done
Answer 6:
哦,答案真是一个长长的名单。 它帮助了很多,最后我创造了由自己,我一直在寻找:
要列出一个目录及其子目录中的所有文件:
find "$PWD" -type f
要列出一个目录及其子目录中的所有目录:
find "$PWD" -type d
要列出一个目录及其子目录中的所有目录和文件:
find "$PWD"
Answer 7:
我不知道完整的路径,但您可以使用-R
递归。 另外,如果你没有在弯曲ls
,你可以做find *
。
Answer 8:
使用比LS其他没有外部命令:
ls -R1 /path |
while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
Answer 9:
du -a
得心应手一些有限的家电壳里寻/定位不可用。
Answer 10:
Answer 11:
我觉得对于一个平面列表最好的方法是:
find -D tree /fullpath/to-dir/
(或以它保存在一个txt文件)
find -D tree /fullpath/to-dir/ > file.txt
Answer 12:
为你将来的人最简单的方法就是:
du
然而,这也说明了什么包含在每个文件夹,您可以用awk只输出文件夹名称的大小:
du | awk '{print $2}'
编辑 - 对不起对不起,是我不好。 我认为这是唯一被需要的文件夹。 生病的情况下,任何人在这里离开这个在将来需要它反正...
Answer 13:
不要让复杂。 我只是用这个,得到了一个漂亮的输出:
ls -lR /path/I/need
Answer 14:
对于具有使用所有可能的选项LS的自由:
find -type f | xargs ls -1
Answer 15:
下面是显示的目录名称的部分答案。
ls -mR * | sed -n 's/://p'
说明:
ls -mR *
列出一个结束的完整目录名“:”,然后分别列出该目录中的文件
sed -n 's/://p'
发现,在冒号结尾线,剥去结肠和打印线
通过遍历目录的列表,我们应该能够找到的目录也是如此。 不过干活就可以了。 它是通过xargs的获得通配符是一个挑战。
Answer 16:
运行具有以下格式bash命令:
find /path -type f -exec ls -l \{\} \;
Answer 17:
添加一个通配符的LS目录的结尾强制完整路径。 现在你有这样的:
$ 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
不幸的是,这并不为打印到递归目录的完整路径,因此它可能不是你要找的完整解决方案。
Answer 18:
Answer 19:
很多答案我看到的。 这是我的,我觉得非常有用的,如果你是在Mac上工作。
我敢肯定,你知道有一些“捆绑”的文件( 后缀名为.app,.rtfd,.workflow,等等)。 而综观Finder的窗口,他们似乎单个文件。 但他们不是。 和$ ls
或$ find
它们看作目录。所以,除非你需要列出其内容为好,这对我的作品:
find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"
当然,这是工作目录,你可以添加其他包扩展(与却总/
后他们)。 或任何其他分机如果不是捆绑的无/
。
颇为有趣的“ .lpdf/
”(多语言PDF)。 它有正常的“ .pdf
在Finder中”扩展(!!)或无。 这样,你得到(或者它只是计数1个文件)这个pdf
,而不是一堆东西...
Answer 20:
如果目录为相对路径过去了,你将需要调用find前将其转换为绝对路径。 在下面的例子中,目录被传递作为第一个参数传递给脚本:
#!/bin/bash
# get absolute path
directory=`cd $1; pwd`
# print out list of files and directories
find $directory
Answer 21:
tar cf - $PWD|tar tvf -
这是缓慢的,但工程递归和打印两个目录和文件。 你可以使用awk / grep的管道,如果你只是想没有所有的其他信息/目录下的文件名:
tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"
Answer 22:
@ ghostdog74:与您的解决方案的小调整。
下面的代码可以用来搜索文件,其完整的绝对路径。
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]
Answer 23:
我知道文件名,但希望在目录中。
找到$ PWD | fgrep一样的文件名
在Mac OS中10.12.1完美地工作
文章来源: ls command: how can I get a recursive full-path listing, one line per file?