You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本遍历子目录并将所有.ptx文件输出到CSV文件?

如何用Bash脚本遍历子目录并将所有.ptx文件输出到CSV文件?

看起来你已经有了一个不错的开头,不过确实需要调整一下来实现递归查找.ptx文件的需求。原来的脚本只能列出当前目录的内容,没办法深入子文件夹,而且没过滤目标文件类型,我们来一步步修改它。

核心思路:用find命令递归查找目标文件

find命令正是处理这类递归文件查找的利器,它可以遍历指定目录下的所有子目录,精准筛选出你需要的文件。

修改后的完整脚本

# 先把路径定义成变量,后续修改月份时更方便
month_dir="/Volumes/NAS/01_PROJECTS/01_SHORTFORM/2024/02_FEB/"
csv_filename="AUDIO_BACKUP_LOG_02_FEB.csv"
log_target_dir="/Volumes/NAS/04_ADMIN/06_BACKUP_LOGS/MONTHS/2024/"

# 检查目标月份目录是否存在
if [ -d "$month_dir" ]; then
    # 递归查找所有.ptx格式的文件,并输出到CSV
    # -type f 确保只找文件,排除目录;-name "*.ptx" 精准匹配后缀
    find "$month_dir" -type f -name "*.ptx" > "$csv_filename"
    
    # 将生成的CSV移动到指定日志目录
    mv "$csv_filename" "$log_target_dir"
    
    echo "Feb completed"
else
    echo "Error: February directory does not exist"
fi

关键部分解释

  1. 避免cd操作:直接给find命令指定完整路径,比先cd进去更安全——不用担心脚本运行过程中目录切换导致的路径错误。
  2. 精准筛选文件:
    • -type f:确保我们只获取文件,不会把子目录也写到CSV里;
    • -name "*.ptx":只匹配后缀为.ptx的文件,过滤掉其他类型的内容。
  3. 变量化路径:把目录和文件名存成变量,之后要处理其他月份(比如03_MAR)时,只需要修改month_dir和csv_filename两个变量即可,不用到处替换字符串,降低出错概率。

可选优化(如果需要更规范的CSV格式)

如果你的文件名里可能包含逗号或者空格(虽然备份文件一般不会,但提前防范总是好的),可以用printf把文件名用引号包裹,确保CSV格式正确:

find "$month_dir" -type f -name "*.ptx" -exec printf '"%s"\n' {} \; > "$csv_filename"

这样每个文件名都会被双引号包裹,避免CSV解析时出错。

备注:内容来源于stack exchange,提问作者LJS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:35:32