ls命令:我怎样才能得到一个递归的完整路径列出每个文件,一行?

StackOverflow https://stackoverflow.com/questions/1767384

  •  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 \>

如果你想知道每个文件的性质,有两个whiles(例如读取只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

完美地工作
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top