在Linux中如何生成带有文件绝对路径的列表?

414
我正在编写一个以文件路径为输入的shell脚本。
因此,我需要生成包含完整路径的递归文件列表。例如,文件bar的路径为:
/home/ken/foo/bar

但就我所见,无论是ls还是find都只提供相对路径的列表:

./foo/bar   (from the folder ken)

这似乎是一个显而易见的需求,但我在 findls 的帮助文档中找不到任何相关内容。

如何在 shell 中生成包含文件绝对路径的文件列表?


2
使用以下命令在Linux中查找文件并显示其详细信息:find /home/ken/foo/bar -exec ls -ld $PWD/{} \; - Learner
29个回答

1
这是一个示例,可以打印出一个没有额外句点的列表,并演示如何搜索文件匹配。希望这能帮到你:
find . -type f -name "extr*" -exec echo `pwd`/{} \; | sed "s|\./||"

1
这对我有用。但是它没有按字母顺序列出。
find "$(pwd)" -maxdepth 1

这个命令会按字母顺序列出所有文件,包括隐藏文件。
ls -d -1 "$PWD/".*; ls -d -1 "$PWD/"*;

1

stat

单个文件的绝对路径:

stat -c %n "$PWD"/foo/bar

0

编写一个小函数

lsf() {
ls `pwd`/$1
}

然后你可以像这样使用

lsf test.sh 

它会返回完整的路径,例如:

/home/testuser/Downloads/test.sh

0

在Linux中,递归文件可以通过多种方式列出。在这里,我分享一个单行脚本,用于清除/var/log/目录下所有日志文件(仅限文件),第二个检查最近哪个日志文件已经有了条目。

首先:

find /var/log/ -type f  #listing file recursively 

第二点:

for i in $(find $PWD -type f) ; do cat /dev/null > "$i" ; done #empty files recursively 

第三种用法:

ls -ltr $(find /var/log/ -type f ) # listing file used in recent

注意:对于目录位置,您也可以传递$PWD而不是/var/log

0
如果您没有符号链接,可以尝试以下方法。
tree -iFL 1 [DIR]

-i 参数使得 tree 命令在每一行中打印文件名,而不是树形结构。

-f 参数使得 tree 命令打印每个文件的完整路径。

-L 1 参数避免了 tree 命令的递归操作。


0
我使用以下代码将目录中文件的绝对路径列在一个文本文件中:
find "$PWD" -wholename '*.JPG' >test.txt

-1
ls -1 | awk  -vpath=$PWD/ '{print path$1}'

-1

find / -print 可以做到这一点。


1
不幸的是,它会执行其他操作(例如显示“一些”其他文件,除非进行过滤)。 - DerMike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接