我寫了一個小bash *腳本來處理目錄中的文件。這些文件具有特定的命名約定,它決定了文件的處理方式。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將一次處理的文件 - 當循環計數器變量是'我們',並在循環for filename in $DATA_DIRECTORY/$i_*_baboon*.csv;
。然而,匹配沒有按照我的預期工作,並且每個(嵌套for循環)循環遍歷目錄中的所有文件 - 這就是我想要的NOT。
如何根據文件名模式匹配文件?
*注:我使用的是bash 4.1.5版本在Ubuntu 10.0.4
這樣做的方式不一樣嗎?它搜索的方式將一次遍歷整個列表,刪除可以讓所有的數組[0]文件。然後所有的數組[1]等。如果你有100個文件,並且每個數組[0-3]都是一個確切的四分之一(其中每個25個)。它會搜索100x 75x 50x 25x。 250次比較。如果你檢查它們(file1 = array [0-3]),你將有400-25-50-75 = 250比較。我有沒有把事情搞砸了,現在已經很晚了,如果我做了,我很抱歉。 – Sturm