使用ls命令在Linux中使用完整路径列出文件

Pra*_*DTI 37 linux bash shell lua command-line

许多人会发现这是重复的问题但我在询问这个主题之前已经完成了所有问题,但没有一个对我有用.

我想使用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
Run Code Online (Sandbox Code Playgroud)

这将打印出根难治和辅助训练中的所有文件.

输出:

  0020111118223425.lvf
  2012
  2012 (2009).mp4
  3 Idiots
  Aashiqui 2
  Agneepath.mkv
  Avatar (2009)
  Captain Phillips (2013)
  Cocktail
Run Code Online (Sandbox Code Playgroud)

我想输出像:

  /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
Run Code Online (Sandbox Code Playgroud)

编辑: 我已经使用了这一切,但它不能在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
Run Code Online (Sandbox Code Playgroud)

没有找到"/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"中的文件,它打印机器根目录文件.

Tot*_*oro 49

您可以使用

  ls -lrt -d -1 $PWD/{*,.*}   
Run Code Online (Sandbox Code Playgroud)

它还会捕获隐藏文件.

  • 请在$ PWD周围添加配额`ls -lrt -d -1"$ PWD"/ {*,.*}`(用空格修复目录). (3认同)

小智 38

你可以试试这个:

ls -d $PWD/*
Run Code Online (Sandbox Code Playgroud)

  • ls -d"$ PWD"/*来计算带有空格的路径. (4认同)
  • 对于空目录,这会抛出"没有这样的文件或目录".我本来希望在空目录上执行`ls`时没有看到什么,但没有例外. (2认同)

sdk*_*kks 18

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

find $PWD -maxdepth 1
Run Code Online (Sandbox Code Playgroud)

与上面相同但仅匹配特定扩展名,不区分大小写(在本例中为.sh文件)

find $PWD -maxdepth 1 -iregex '.+\.sh'
Run Code Online (Sandbox Code Playgroud)

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

mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1
Run Code Online (Sandbox Code Playgroud)

maxdepth阻止查找进入子目录,例如,您可以将其设置为"2"以列出子项中的项目.如果您需要递归,只需将其删除即可.

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

find $PWD -maxdepth 1 -type f
Run Code Online (Sandbox Code Playgroud)

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

Muh*_*man 5

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

ls -d -1 $PWD/*.*
Run Code Online (Sandbox Code Playgroud)

以下列出目录:

ls -d -1 $PWD/**
Run Code Online (Sandbox Code Playgroud)

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

ls -d -1 $PWD/**/*
Run Code Online (Sandbox Code Playgroud)

更多有用的选项:

-d列出目录而不是它们的内容

-R递归

-1每行列出一个文件

-l使用长列表格式

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

-A全部列出,但未列出。和..

有关更多信息,只需键入以下内容

ls --help 
Run Code Online (Sandbox Code Playgroud)


Pau*_*eux 5

使用以下命令打印完整路径(也称为解析路径):

realpath README.md
Run Code Online (Sandbox Code Playgroud)

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

realpath *
Run Code Online (Sandbox Code Playgroud)

如果您正在编写 bash 脚本,我想您将有一个用于各个文件名的变量。

感谢 VIPIN KUMAR 指出相关readlink命令。