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

时间:2014-12-07 06:33:16

标签: linux bash shell command-line lua

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

我想使用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”中的文件,而是打印出机器根目录文件。

13 个答案:

答案 0 :(得分:39)

您可以使用

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

它还会捕获隐藏文件。

答案 1 :(得分:30)

你可以试试这个:

ls -d $PWD/*

答案 2 :(得分:16)

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

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

答案 3 :(得分:4)

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

ls -d -1 $PWD/*.*

以下列出目录:

ls -d -1 $PWD/**

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

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

更多有用的选项:

  

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

     

-R recursive

     

-1每行列出一个文件

     

-l使用长列表格式

     

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

     

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

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

即可
ls --help 

答案 4 :(得分: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

答案 5 :(得分:1)

尝试-

Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at java.util.Arrays$ArrayList.get(Arrays.java:3841) at org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:417) at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:592) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796) at org.apache.hadoop.hive.ql.exec.UDTFOperator.forwardUDTFOutput(UDTFOperator.java:125) at org.apache.hadoop.hive.ql.udf.generic.UDTFCollector.collect(UDTFCollector.java:45) at org.apache.hadoop.hive.ql.udf.generic.GenericUDTF.forward(GenericUDTF.java:107) at com.suba.customHiveUdfs.MyUdtf.process(MyUdtf.java:61) at org.apache.hadoop.hive.ql.exec.UDTFOperator.processOp(UDTFOperator.java:108) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796) at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:87) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796) at org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:92) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:796) at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:539) ... 9 more

答案 6 :(得分:0)

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

这样的事情

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

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

答案 7 :(得分: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`/{})

答案 8 :(得分:0)

我遇到过这个问题,我使用以下内容:

  

ls -dl $ PWD / * | grep $ PWD

它一直是我想要的列表,但你的里程可能会有所不同。

答案 9 :(得分:0)

这对我有用:

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

答案 10 :(得分: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 

答案 11 :(得分:0)

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

realpath *

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

readlink

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

感谢VIPIN KUMAR指向相关的 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp13 { class Program { static public List<Person> personList = new List<Person>(); static void Main(string[] args) { do { Person person = new Person();//initialize here Console.WriteLine("Your name: "); person.Name = Console.ReadLine(); Console.WriteLine("Your Surname: "); person.Surname = Console.ReadLine(); personList.Add(person); } while (personList.Count < 3); foreach (Person item in personList) { Console.WriteLine(item.Name + " " + item.Surname); } Console.ReadKey(); } } class Person { public string Name { get; set; } public string Surname { get; set; } } } 命令。

答案 12 :(得分:0)

怎么样:

sku[1]

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

天啊!
-101-