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

问题描述 投票:0回答:15

很多人会发现这是重复的问题,但在询问此主题之前我已经浏览了所有问题,但没有一个对我有用。

我想使用 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
15个回答
80
投票

你可以使用

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

它还会捕获隐藏文件。


59
投票

你可以试试这个:

ls -d $PWD/*

28
投票

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

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

6
投票

您可以轻松地使用以下命令仅列出文件:

ls -d -1 $PWD/*.*

以下列出目录:

ls -d -1 $PWD/**

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

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

更多有用的选项:

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

-R 递归

-1 每行列出一个文件

-l 使用长列表格式

-所有包含以 . 开头的条目的列表。和..

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

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

ls --help 

5
投票

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

realpath README.md

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

realpath *

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

感谢 VIPIN KUMAR 指出相关的

readlink
命令。


3
投票

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

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

1
投票

试试这个 -

readlink -f file.txt


1
投票

怎么样:

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

这将为您提供相对于您当前位置的文件和目录列表。您还将获得大小(如果您想要以字节为单位的大小,请添加“-b”参数)。最大深度参数可能是必要的,以“鼓励”你足够深入地研究你的文件结构——或者防止它被带走。

YMMV!
-101-


0
投票

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

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`/{})

0
投票

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

ls -dl $PWD/* | grep $PWD

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


0
投票

这对我有用:

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

0
投票

您只想要完整路径,为什么不使用为此目的的实用程序 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 


0
投票

如果您想在子目录树中递归列出绝对路径名,请使用 du 和管道进入 cut。


0
投票

最简单的方法是使用

find
来完成。如果您想列出某些类型的文件,只需在
grep
 之后使用 
|

即仅显示文件夹内的 mp3 文件

find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | grep mp3

-1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.