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