我想逐行列出文件夹中的所有文件及其各自的绝对路径,如下所示,
filename1 /home/.../file1
filename2 /home/.../file2
filename3 /home/.../file3
我尝试过find $(pwd) -type f
,但它只给出了路径。
答案1
使用 GNU find
:
find "$PWD" -type f -printf '%f %h/%f\n'
%f
删除所有前导目录的文件名(仅最后一个元素)。%h
文件名的前导目录(除了最后一个元素之外的所有目录)。如果文件名不包含斜杠(因为它位于当前目录中),%h 说明符将扩展为“.”。
答案2
与标准find
:
find "$PWD" -type f -exec sh -c '
for pathname do
printf "%s\t%s\n" "${pathname##*/}" "$pathname"
done' sh {} +
这将打印当前目录中或当前目录下所有文件的制表符分隔列表。第一列将包含文件的文件名,第二列将包含文件相对于当前目录($PWD
搜索路径中的绝对路径)的路径名。
这是通过将找到的路径名批量提供给一个简短的内联脚本来完成的,该脚本仅以首选格式输出名称。参数替换${pathname##*/}
扩展到 的值,$pathname
并删除最后一个之前的所有内容/
。
请注意,包含换行符的文件名将出现在多行中,并且很难正确区分包含制表符的文件名。假设结果是用于查看而不是解析,那可能没问题。
答案3
答案4
和zsh
:
for f (**/*(DN)) print -r -- $f $f:P
$f:P
相当于将realpath()
so 扩展到文件的规范绝对路径(将路径组件中的所有符号链接递归地扩展到其目标)。