如何用Bash命令将目录中文件名与绝对路径写入CSV文件
我懂你现在的需求——要把文件夹里近100个CSV文件的文件名和对应的绝对路径,整理成一个新的CSV文件对吧?其实用Bash的几个简单命令就能搞定,我给你两个实用的方案,按需选就行:
方案1:基础for循环(适合新手理解)
这个方法逻辑清晰,容易上手,适合只处理当前文件夹下的CSV文件:
# 先清空输出文件(如果之前存在out.csv的话,避免旧内容干扰) > out.csv # 遍历当前目录下所有.csv后缀的文件 for file in *.csv; do # 把文件名和绝对路径用逗号分隔,追加写入out.csv echo "$file,$(realpath "$file")" >> out.csv done
小提示:
- 如果你的系统没有
realpath命令(比如部分老版本的macOS),可以用readlink -f "$file"替代;或者用更兼容的写法:echo "$file,$(cd "$(dirname "$file")"; pwd)/$(basename "$file")" - 如果文件名里包含逗号(虽然CSV文件名很少这么做,但防患于未然),可以给字段加上双引号,保证CSV格式规范:
echo "\"$file\",\"$(realpath "$file")\"" >> out.csv
方案2:用find命令(支持递归遍历子文件夹)
如果你的CSV文件不仅在当前文件夹,还散落在子目录里,用find命令更高效:
# 把/path/to/your/folder替换成你的目标文件夹的绝对路径 find /path/to/your/folder -type f -name "*.csv" -printf "%f,%p\n" > out.csv
解释:
-type f:只筛选文件(排除文件夹)-name "*.csv":只匹配后缀为csv的文件%f:输出文件名(不带路径),%p:输出文件的完整绝对路径,用逗号分隔后换行写入out.csv
macOS兼容说明:
如果是在macOS上,find的printf参数语法略有不同,你可以改用这个写法:
find /path/to/your/folder -type f -name "*.csv" -exec sh -c 'echo "$(basename "$1"),$1"' _ {} \; > out.csv
这样处理完,你就能得到一个包含所有目标CSV文件名和绝对路径的out.csv文件啦~
内容的提问来源于stack exchange,提问作者yuqli
相关产品推荐
相关产品推荐

