Linux下用Bash命令生成含文件名与绝对路径的CSV文件列表
生成包含文件名与绝对路径的CSV文件
问题场景
我有大量文件(约50000个)存储在/home/abc/def/目录下,执行ls /home/abc/def/可列出所有文件名,希望生成一个CSV文件,格式要求如下:
file1.txt,/home/abc/def/file1.txt
file2.txt,/home/abc/def/file2.txt
.........................
file50000.txt,/home/abc/def/file50000.txt
即第一列为文件名,第二列为对应文件的绝对路径。尝试了以下命令但无法得到预期结果:
find /home/abc/def/ -type f -exec ls -ld {} \; | awk '{ print $5, $9 }' > output.csv
原命令问题分析
ls -ld的输出中,$5是文件大小,并非文件名;$9仅能获取不含空格的文件名,若文件名包含空格,会被拆分为多个字段,导致截取不完整。- 输出用空格分隔字段,不符合CSV要求的逗号分隔格式。
解决方案
方法一:使用find内置格式化输出(推荐,效率最高)
find /home/abc/def/ -type f -printf "%f,%p\n" > output.csv
%f:输出文件的basename(不带路径的纯文件名)%p:输出文件的完整绝对路径- 直接用逗号分隔两个字段,无需额外处理,适合大数量文件,且能兼容带空格的文件名。
方法二:Bash循环遍历
cd /home/abc/def/ for file in *; do [ -f "$file" ] && echo "$file,$(realpath "$file")" >> output.csv done
- 先进入目标目录,遍历所有条目
[ -f "$file" ]确保只处理普通文件realpath "$file"获取文件的绝对路径,双引号包裹变量避免空格导致的错误
方法三:find结合awk处理
find /home/abc/def/ -type f | awk -F/ '{print $NF","$0}' > output.csv
find输出所有文件的绝对路径awk以/为分隔符,$NF取最后一个字段(即文件名),$0为完整路径,用逗号拼接输出
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

