![](/img/trans.png)
[英]How to display full path of file using ls in linux with -R option in conjunction with grep
[英]List file using ls command in Linux with full path
许多人会发现这是重复的问题,但在被问及这个话题之前,我已经解决了所有问题,但没有一个对我有用。
我想使用 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
这将打印出根目录和子目录中的所有文件。
Output:
0020111118223425.lvf
2012
2012 (2009).mp4
3 Idiots
Aashiqui 2
Agneepath.mkv
Avatar (2009)
Captain Phillips (2013)
Cocktail
我想要 output 像:
/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”中找不到文件,它会打印机器根目录文件。
您可以使用
ls -lrt -d -1 "$PWD"/{*,.*}
它还将捕获隐藏文件。
你可以试试这个:
ls -d $PWD/*
用于以完整路径列出所有内容,仅在当前目录中
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
您可以轻松使用以下内容仅列出文件:
ls -d -1 $PWD/*.*
以下列出目录:
ls -d -1 $PWD/**
以下列出所有内容(文件/目录):
ls -d -1 $PWD/**/*
更多有用的选项:
-d 列出目录而不是它们的内容
-R 递归
-1 每行列出一个文件
-l 使用长列表格式
-a 列出所有包括以 开头的条目。 和 ..
- 列出所有但不列出隐含的。 和 ..
欲了解更多信息,只需输入以下内容
ls --help
这将从当前目录递归打印所有文件。
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
使用以下命令打印完整路径(也称为解析路径):
realpath README.md
在交互模式下,您可以使用 shell 扩展列出目录中的所有文件及其完整路径:
realpath *
如果您正在编写 bash 脚本,我想您将拥有一个用于各个文件名的变量。
感谢 VIPIN KUMAR 指出相关的readlink
命令。
尝试这个 -
readlink -f file.txt
ls
命令只会打印目录中文件的名称。 为什么不做类似的事情
print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)
这将打印出带有文件名的目录。
有不止一种方法可以做到这一点,我认为最简单的方法是:
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`/{})
我遇到了这个问题,我使用以下内容:
ls -dl $PWD/* | grep $PWD
它总是让我得到我想要的清单,但你的里程可能会有所不同。
这对我有用:
ls -rt -d -1 $PWD/{*,.*}
你只想要完整的路径,为什么不使用这个实用程序,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
怎么样:
du -a [-b] [--max-depth=N]
这应该会给你一个文件和目录列表,相对于你的当前位置。 您还将获得大小(如果您想要以字节为单位的大小,请添加“-b”参数)。 max-depth 参数可能是必要的,以“鼓励” du 深入了解您的文件结构——或者防止它被带走。
天啊!
-101-
如果要递归列出子目录树中的绝对路径名,请使用 du 和 pipe 进行剪切。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.