37

我需要处理目录中的大量文件。根据文件名,可以将文件分成几个组。也就是说,文件名可以与它们所属的“组”进行模式匹配。例如,名称是这样的:

  • YYYYMMDD_*_bulk_import.csv
  • YYYYMMDD_*_genstats_import.csv
  • YYYYMMDD_*allstats.csv

ETC ...

每个“组”都有不同的处理方法(即调用不同的命令进行处理)。

我想写一个 bash 脚本来:

  1. 遍历目录中的所有 CSV 文件
  2. 通过将文件名称与已知模式匹配来确定文件属于哪个“组”(如我上面给出的示例)
  3. 根据确定的分组调用命令。

我在 Ubuntu 10.0.4 上运行。我是 bash 新手,希望能帮助我开始编写此脚本的框架代码片段。

4

2 回答 2

72

最简单的方法可能只是分别迭代每个组。这完全避开了解析问题。

DIRECTORY=.

for i in $DIRECTORY/YYYYMMDD_*_bulk_import.csv; do
    # Process $i
done

for i in $DIRECTORY/YYYYMMDD_*_genstats_import.csv; do
    # Process $i
done

for i in $DIRECTORY/YYYYMMDD_*allstats.csv; do
    # Process $i
done

设置DIRECTORY为您要搜索的任何目录。默认.将搜索当前工作目录。

于 2012-06-25T08:29:09.600 回答
10

这是文件的基本迭代,使用 switch 块来确定文件类型。

#!/bin/bash
for f in *; do
        case $f in 
                [0-9]*_bulk_import.csv)
                        echo $f case 1
                        ;;
                [0-9]*_genstats_import.csv)
                        echo $f case 2
                        ;;
                [0-9]*allstats.csv)
                        echo $f case 3
                        ;;
        esac
done
于 2012-06-25T08:46:27.480 回答