unix 在linux中创建带有文件绝对路径的文件列表

bnlyeluc  于 2022-11-04  发布在  Unix
关注(0)|答案(4)|浏览(174)

我有大量的文件(约50000个文件)。
ls /主页/abc/定义/

file1.txt
file2.txt
file3.txt
.........
.........
file50000.txt

我想创建一个包含两列的CSV文件:第一列提供文件名,第二列提供绝对文件路径,如下所示:
output.csv

file1.txt,/home/abc/def/file1.txt
file2.txt,/home/abc/def/file2.txt
file3.txt,/home/abc/def/file3.txt
.........................
.........................
file50000.txt,/home/abc/def/file50000.txt

如何使用bash命令来完成此操作。我尝试使用ls和find as

find /home/abc/def/ -type f -exec ls -ld {} \; | awk '{ print $5, $9 }' > output.csv

但这给了我绝对路径。如何得到上面output.csv中所示的输出

kjthegm6

kjthegm61#

您可以使用GNU find-printf选项获得文件名和完整路径:

find /home/abc/def -type f -printf "%f,%p\n"

如果要排序结果,请使用管道通过sort

yacmzcpb

yacmzcpb2#

怎么样:

$ find /path/ | awk -F/ -v OFS=, '{print $NF,$0}'

根据需要将适当的开关添加到find

icnyk63a

icnyk63a3#

如果你想完全规范化所有现有的路径,包括修复重复的/和解析符号链接到它们的物理,为什么不

find … -print0               |
or
   gls --zero                   |
or 
   mawk 8 ORS='\0' filelist.txt |

           xargs -0 -P 8 grealpath -ePq
njthzxwz

njthzxwz4#

普通bash

for file in /home/abc/def/*.txt; do printf '%s,%s\n' "${file##*/}" "$file"; done

或者,

dir=/home/abc/def
cd "$dir" && for file in *.txt; do printf '%s,%s\n' "$file" "$dir/$file"; done

相关问题