【问题标题】:List file using ls command in Linux with full path在 Linux 中使用 ls 命令列出文件的完整路径
【发布时间】:2015-02-05 01:32:54
【问题描述】:

许多人会发现这是重复的问题,但我已经回答了之前关于这个主题的所有问题,但没有一个对我有用。

我想使用 ls 命令打印特定文件格式的完整路径名,到目前为止,我发现有一段代码可以打印目录中的所有文件,但不是完整路径。

for i in io.popen("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do
  if string.find(i,"%.*$") then 
     print(i) 
  end
end

这将打印出根目录和子目录中的所有文件。

输出:

  0020111118223425.lvf
  2012
  2012 (2009).mp4
  3 Idiots
  Aashiqui 2
  Agneepath.mkv
  Avatar (2009)
  Captain Phillips (2013)
  Cocktail

我想要这样的输出:

  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/0020111118223425.lvf           [File in Root Directory]
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012/2012.mkv
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012 (2009).mp4                [File in Root Directory]
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/3 Idiots/3 Idiots.mkv
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Aashiqui 2/Aashiqui 2.mkv
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Avatar (2009)/Avatar (2009).mkv
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Captain Phillips (2013).mkv
  /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Cocktail/Cocktail.mkv

编辑: 我已经使用了这一切,但它不适用于我在 LUA 中的代码。

当我使用我的代码时,它显示错误的目录

for i in io.popen("ls -d $PWD/* /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do
    if string.find(i,"%.*$") then
      print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/"..i)
    end
  end

未在“/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7”中找到文件,插入其打印机器根目录文件。

【问题讨论】:

标签: linux bash shell command-line lua


【解决方案1】:

ls 命令只会打印目录中的文件名。为什么不做类似的事情

print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)

这将打印出带有文件名的目录。

【讨论】:

  • 这不适用于子目录。我也想在 lua 中实现,所以我想你是在告诉我像 print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/"..i)
  • 您的代码使用的是字符串文字。我只是复制粘贴。对您的 lua 脚本进行更改以允许您在任何目录上调用它并获得所需的结果将是微不足道的。
【解决方案2】:

有不止一种方法可以做到这一点,我认为最简单的方法是:

find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7

这也应该有效:

(cd /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7; ls | xargs -i echo `pwd`/{})

【讨论】:

    【解决方案3】:

    你可以使用

      ls -lrt -d -1 "$PWD"/{*,.*}   
    

    它还会捕获隐藏文件。

    【讨论】:

    • 这将如何与我的代码一起使用。 for i in io.popen("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do if string.find(i,"%.*$") then print(i) end end跨度>
    • @user1640175 for i in io.popen("ls -lrt -d -1 /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/{*,.*}")
    • 无权访问目录且无法展开 *. (例如,sudo ls -d -1 /some/dir/i/cant/normally/access/*
    • 请在 $PWD ls -lrt -d -1 "$PWD"/{*,.*} 周围添加配额(修复带有空格的目录)。
    • 不适用于具有大量目录条目的目录/路径:-bash: /bin/ls: Argument list too long
    【解决方案4】:

    你可以试试这个:

    ls -d $PWD/*
    

    【讨论】:

    • ls -d "$PWD"/* 来说明带有空格的路径。
    • 对于空目录,这会抛出 No such file or directory。我本来希望在空目录上执行ls 时什么都看不到,但也不例外。
    【解决方案5】:

    这会以递归方式打印当前目录中的所有文件。

    find "$PWD" | awk /.ogg/ # filter .ogg files by regex
    find "$PWD" | grep .ogg  # filter .ogg files by term
    find "$PWD" | ack .ogg   # filter .ogg files by regex/term using https://github.com/petdance/ack2
    

    【讨论】:

      【解决方案6】:

      用于列出具有完整路径的所有内容,仅在当前目录中

      find $PWD -maxdepth 1
      

      与上面相同,但只匹配特定的扩展名,不区分大小写(在这种情况下为 .sh 文件)

      find $PWD -maxdepth 1 -iregex '.+\.sh'
      

      $PWD 为当前目录,可以替换为任意目录

      mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1
      

      maxdepth 阻止 find 进入子目录,例如,您也可以将其设置为“2”以列出子目录中的项目。如果您需要递归,只需将其删除。

      要将其限制为仅文件,可以使用-type f 选项。

      find $PWD -maxdepth 1 -type f
      

      【讨论】:

      • 在尝试了各种解决方案之后,这是我能找到的唯一一个可以工作 1)递归同时 2)引用符号链接和 3)打印整个路径(我需要 | grep) .谢谢!
      【解决方案7】:

      您可以轻松地使用以下内容仅列出文件:

      ls -d -1 $PWD/*.*
      

      以下列出目录:

      ls -d -1 $PWD/**
      

      以下列出所有内容(文件/目录):

      ls -d -1 $PWD/**/*
      

      更多有用的选项:

      -d 列出目录而不是其内容

      -R递归

      -1 每行列出一个文件

      -l 使用长列表格式

      -a 列出所有包括以 . 开头的条目。和..

      -列出所有但不列出隐含的。和..

      更多信息,只需输入以下内容

      ls --help 
      

      【讨论】:

        【解决方案8】:

        我遇到过这个问题,我使用以下方法:

        ls -dl $PWD/* | grep $PWD

        它总是为我提供我想要的列表,但您的里程可能会有所不同。

        【讨论】:

          【解决方案9】:

          这对我有用:

          ls -rt -d -1 $PWD/{*,.*}
          

          【讨论】:

          • 您能否详细说明您的代码中使用的标志?
          【解决方案10】:

          您只想要完整路径,为什么不使用专用的实用程序 readlink 和 grep 的组合应该可以满足您的需求

          grep -R  '--include=*.'{mkv,mp4} ? | cut -d ' ' -f3  | xargs readlink -e # 
          the question mark should be replaced with the right pattern - this is almost right
          # this is probably the best solution remove the grep part if you dont need a filter
          find <dirname> | grep .mkv | xargs readlink -e |  xargs ls --color=auto # only matroska files in the dir and subdirs with nice color - also you can edit ls flags
          find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | grep .mkv 
          find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | xargs grep -R  '--include=*.'{mkv,mp4} . | cut -d ' ' -f3 # I am sure you can do more with grep 
          readlink -f `ls` # in the directory or 
          
          

          【讨论】:

            【解决方案11】:

            试试这个 -

            readlink -f file.txt

            【讨论】:

              【解决方案12】:

              打印完整路径(也称为解析路径):

              realpath README.md
              

              在交互模式下,您可以使用 shell 扩展列出目录中的所有文件及其完整路径:

              realpath *
              

              如果你正在编写一个 bash 脚本,我猜你会有一个用于单个文件名的变量。

              感谢 VIPIN KUMAR 指向相关的readlink 命令。

              【讨论】:

                【解决方案13】:

                怎么样:

                 du -a [-b] [--max-depth=N] 
                

                这应该会为您提供相对于您当前位置的文件和目录列表。您还将获得大小(如果您想要以字节为单位的大小,请添加“-b”参数)。 max-depth 参数可能是必要的,以“鼓励” du 深入了解您的文件结构 - 或防止它被带走。

                YMMV!
                -101-

                【讨论】:

                  猜你喜欢
                  • 2018-12-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-09-11
                  • 2013-09-07
                  • 1970-01-01
                  • 2014-06-27
                  • 1970-01-01
                  相关资源
                  最近更新 更多