首页 文章

ls命令:如何获得递归的完整路径列表,每个文件一行?

提问于
浏览
385

我怎样才能让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 差不多做我需要的东西,但我不想要路径碎片,我想要完整的路径 .

23 回答

  • 14

    如果你真的想使用 ls ,那么使用awk格式化它的输出:

    ls -R /path | awk '
    /:$/&&f{s=$0;f=0}
    /:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
    NF&&f{ print s"/"$0 }'
    
  • 36

    使用find:

    find .
    find /home/dreftymac
    

    如果只需要文件(省略目录,设备等):

    find . -type f
    find /home/dreftymac -type f
    
  • 3

    ls -ld $(find .)

    如果要按修改时间对输出进行排序:

    ls -ltd $(find .)

  • 14

    尝试以下更简单的方法:

    find "$PWD"
    
  • 456

    最好的命令是: tree -fi

    要使用文件而不使用链接,您必须从输出中删除 >

    tree -fi |grep -v \>
    

    如果你想知道每个文件的性质,(例如只读取ASCII文件)有两个 while

    tree -fi | \
    grep -v \> | \
    while read first ; do 
        file ${first}
    done | \
    while read second; do 
        echo ${second} | grep ASCII
    done
    
  • 5

    哦真的很长的答案清单 . 它帮助了很多,最后我创建了我自己寻找的东西:

    列出目录及其子目录中的所有文件:

    find "$PWD" -type f
    

    列出目录及其子目录中的所有目录:

    find "$PWD" -type d
    

    列出目录及其子目录中的所有目录和文件:

    find "$PWD"
    
  • 3

    我不知道完整路径,但您可以使用 -R 进行递归 . 或者,如果你不喜欢 ls ,你可以做 find * .

  • 7

    除了ls之外不使用外部命令:

    ls -R1 /path | 
      while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done
    
  • 9
    du -a
    

    对于某些找不到/找不到的有限设备外壳很方便 .

  • 12

    找/将做的伎俩

  • 2

    我认为最好的方法是:

    find -D tree /fullpath/to-dir/
    

    (或者为了将其保存在txt文件中)

    find -D tree /fullpath/to-dir/ > file.txt
    
  • 6

    对于所有未来的人来说,最简单的方法就是:

    du
    

    但是,这也显示了每个文件夹中包含的内容的大小您可以使用awk仅输出文件夹名称:

    du | awk '{print $2}'
    

    编辑 - 抱歉抱歉,我的不好 . 我以为这只是需要的文件夹 . 我会留下这个以防万一将来需要它...

  • 6

    有了使用所有可能的ls选项的自由:

    find -type f | xargs ls -1

  • 5

    以下是显示目录名称的部分答案 .

    ls -mR * | sed -n 's/://p'
    

    说明:

    ls -mR * 列出以':'结尾的完整目录名,然后分别列出该目录中的文件

    sed -n 's/://p' 找到以冒号结尾的行,剥离冒号并打印该行

    通过迭代目录列表,我们也应该能够找到目录 . 还在努力 . 通过xargs获取通配符是一项挑战 .

  • 2

    使用以下格式运行bash命令:

    find /path -type f -exec ls -l \{\} \;
    
  • 48

    将通配符添加到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
    

    不幸的是,这不会打印递归目录的完整路径,因此它可能不是您正在寻找的完整解决方案 .

  • 67

    ls -lR 就是你要找的,或至少我是 . 干杯

  • 4

    我看到很多答案 . 这是我的,如果你在Mac上工作,我觉得非常有用 .

    我相信你知道有一些"bundle"文件(.app,.rtfd,.workflow等) . 看着Finder的窗口,他们看起来像是单个文件 . 但事实并非如此 . 并且 $ ls$ find 将它们视为目录......所以,除非您需要列出其内容,否则这对我有用:

    find . -not -name ".*" -not -name "." | egrep -v "\.rtfd/|\.app/|\.lpdf/|\.workflow/"
    

    当然这是针对工作目录,你可以添加其他捆绑包的扩展名(但总是带有 / ) . 或者任何其他扩展,如果没有捆绑没有 / .

    相当有趣的是“ .lpdf/ " (multilingual pdf). It has normal " .pdf ”扩展名(!!)或Finder中没有 . 这样你得到(或者它只计算1个文件)这个 pdf 而不是一堆东西......

  • 8

    如果目录作为相对路径传递,则需要在调用find之前将其转换为绝对路径 . 在以下示例中,目录作为第一个参数传递给脚本:

    #!/bin/bash
    
    # get absolute path
    directory=`cd $1; pwd`
    # print out list of files and directories
    find $directory
    
  • 13
    tar cf - $PWD|tar tvf -
    

    这很慢,但递归工作并打印目录和文件 . 如果你只想要没有所有其他信息/目录的文件名,你可以用awk / grep管道:

    tar cf - $PWD|tar tvf -|awk '{print $6}'|grep -v "/$"
    
  • 1

    @ ghostdog74:你的解决方案很少调整 .
    以下代码可用于搜索具有完整绝对路径的文件 .

    sudo ls -R / | awk '
    /:$/&&f{s=$0;f=0}
    /:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
    NF&&f{ print s"/"$0 }' | grep [file_to_search]
  • 23

    不要让它变得复杂 . 我刚用过这个并获得了很好的输出:

    ls -lR /path/I/need
    
  • 314

    我知道文件名,但也想要目录 .

    找到$ PWD | fgrep文件名

    在Mac OS 10.12.1中完美运行

相关问题