我编写了一个小的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
Run Code Online (Sandbox Code Playgroud)
我期望上面的脚本以下列方式匹配文件:名为us_2007_deaths_caused_by_baboon.csv的文件将被处理一次 - 当循环计数器变量为'us'时和循环期间for filename in $DATA_DIRECTORY/$i_*_baboon*.csv;
.但是,匹配不能按预期工作,并且每个(嵌套for循环)循环遍历目录中的所有文件 - 这不是我想要的.
我如何根据文件名模式匹配文件?
*注意:我在Ubuntu 10.0.4上使用bash 4.1.5版
写${i}_
而不是$i_
因为$i_
是""(bash认为这i_
是一个变量).
例如:
for filename in $DATA_DIRECTORY/${i}_*_baboon*.csv; do
echo "Processing file: $filename in loop: $i"
done
Run Code Online (Sandbox Code Playgroud)