2

ディレクトリ内のファイルを処理するための小さなbash*スクリプトを作成しました。ファイルには、ファイルの処理方法を決定する特定の命名規則があります。

ファイル名は地理的な起点で始まり、ファイル名にキーワードが含まれており、処理方法を決定します。

これが私のスクリプトの簡略版です:

DATA_DIRECTORY=./data

array=( 'uk' 'usa' 'fra' 'ukr' )

for i in "${array[@]}"
do
    echo "#################################################"
    echo "Loop index : $i"
    echo "#################################################"

    # process baboon data for the current country
    for filename in $DATA_DIRECTORY/$i_*_baboon*.csv; do
       echo "Processing file: $filename in loop: $i"
    done

    # process whale data for the current country
    for filename in $DATA_DIRECTORY/$i_*_whale*.csv; do
       echo "Processing file: $filename in loop: $i"
    done

    # process lion data for the current country
    for filename in $DATA_DIRECTORY/$i_*_lion*.csv; do
       echo "Processing file: $filename in loop: $i"
    done

done

上記のスクリプトが次のようにファイルと一致することを期待しています。us_2007_deaths_caused_by_baboon.csvという名前のファイルは、ループカウンター変数が「us」の場合とループ中に1回処理されますfor filename in $DATA_DIRECTORY/$i_*_baboon*.csv;。ただし、マッチングは期待どおりに機能せず、それぞれ(forループにネストされています)がディレクトリ内のすべてのファイルをループしています-これは私が望むものではありません

ファイル名に基づいてファイルをパターンマッチングするにはどうすればよいですか?

*注:Ubuntu10.0.4でbashバージョン4.1.5を使用しています

4

2 に答える 2

6

「」${i}_の代わりに書き込みます(bashは$i_これが変数であると考えています)。$i_i_

例えば:

for filename in $DATA_DIRECTORY/${i}_*_baboon*.csv; do
   echo "Processing file: $filename in loop: $i"
done
于 2012-06-28T08:32:15.330 に答える
0

の代わりに変数として解析されるため、${i}の代わりにを使用してみてください。$i$i_*i_i

于 2012-06-28T08:34:43.427 に答える