2012-06-25 130 views
16

我需要處理目錄中的大量文件。根據文件名稱可以將文件分成幾個組。也就是說,文件名可以模式匹配它們所屬的'組'。例如,名字是這樣的:Bash腳本迭代目錄中的文件和模式匹配文件名

  • YYYYMMDD _ * _ bulk_import.csv
  • YYYYMMDD _ * _ genstats_import.csv
  • YYYYMMDD_ * allstats.csv

等等

每個「組」具有不同的處理方法(即要求處理不同的命令)。

我想寫一個bash腳本:通過所有CSV文件的目錄

  • 確定哪個「組」文件屬於由模式它的名字匹配已知模式

    1. 迭代(如上面給出的示例)
    2. 根據確定的分組調用命令。

    我在Ubuntu 10.0.4上運行。我是bash的新手,並且會欣賞骨架代碼片段,這將幫助我開始編寫此腳本。

  • 回答

    34

    最簡單的方法可能就是分別迭代每個組。這一方面完全解決了解析問題。

    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設置爲您要搜索的任何目錄。默認.將搜索當前工作目錄。

    +0

    不錯,簡單。獲得我的投票! –

    +0

    會有一個簡單的方法來獲得循環中'*'的「值」嗎? – luckydonald

    6

    這裏是對文件的基本迭代,用開關塊來確定文件類型。

    #!/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