2014-12-07 203 views
23

许多人会发现,这是重复的问题,但我已经经历了所有问题,然后问及这个主题,但没有为我工作。使用ls命令在Linux中使用完整路径列出文件

我想打印使用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” insted的打印它的机器的根目录下的文件。

+0

的可能的复制[ls命令:?我怎样才能得到一个递归全路径列表,每个文件一行(http://stackoverflow.com/questions/ 1767384/ls -a-command-how-can-i-get-a-recursive-full-path-listing-one-line-per-file) – 2016-08-26 03:13:25

回答

24

您可以使用

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

它也会捕获隐藏的文件。

+0

这将如何与我的代码一起工作。为我在io.popen(“ls /mnt/mediashare/net/192.168.1。220_STORAGE_1d1b7 “):行()做 如果string.find(我,” %* $ “),那么 打印(I) 结束 结束 – 2014-12-07 07:02:06

+1

@在io.popen(user1640175'因为我的” ls -lrt -d。 -1 /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /{*,.*}“)' – Totoro 2014-12-07 07:20:22

+0

得到它的工作感谢 – 2014-12-07 07:26:37

0

ls命令将只打印目录中文件的名称。为什么不这样做

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

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

+0

这不适用于子目录。还有我想要在卢阿实施,所以我认为你告诉我要做像打印(“/ mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /”..我) – 2014-12-07 06:50:09

+0

你的代码是使用字符串文字。我只复制并粘贴它。对你的lua脚本进行更改可以让你在任何目录下调用这个脚本并获得你想要的结果,这将是微不足道的。 – 2014-12-07 07:36:12

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

你可以试试这个:

ls -d $PWD/* 
+4

ls -d“$ PWD”/ *用来解释带空格的路径 – 2015-03-25 03:34:57

+1

对于空目录,这会抛出'No such file or directory'。预计在空目录上执行'ls'时什么也看不到,但没有例外。 – schreon 2015-10-06 09:29:10

2

这将打印的所有文件,递归,从当前目录。

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 
10

仅适用于在当前目录

find $PWD -maxdepth 1 

同上,但仅匹配特定的扩展,不区分大小写(完整路径上市的一切。SH在这种情况下的文件)

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

$ PWD是当前目录下,它可以与任何目录

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

maxdepth防止进入子目录中找到代替,比如你可以将其设置为“ 2“用于在儿童中列出项目。如果您需要递归,只需将其删除即可。

要限制它仅限于文件,可以使用-type f选项。

find $PWD -maxdepth 1 -type f 
+1

在尝试了各种解决方案之后,这是我能找到的唯一一个可以工作的递归方法1)在2)引用符号链接和3)打印整个路径(我需要''| grep')。谢谢! – 2017-05-15 21:04:11

4

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

ls -d -1 $PWD/*.* 

以下列出目录:

ls -d -1 $PWD/** 

下面列出的一切(文件/显示目录):

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

Mor Ë有用的选项:

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

-R递归

-1列表每行

一个文件-l使用长格式

- 一个列表全部包含以下条目。和..

-A列出所有但不列出暗示。和..

更多的信息,只需键入以下

ls --help 
0

我有过这样的问题,我用的是以下几点:

LS -dl $ PWD/* | grep $ PWD

它总是让我上市我想要的,但你的里程可能会有所不同。

0

这为我工作:

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

你能详细说明你的代码中使用的标志吗? – Jublo 2017-07-03 23:31:07

+0

感谢Frits的更新 – 2017-07-04 19:10:59

+0

'$ man ls'可能是有用的 – 2017-07-23 14:10:52

相关问题