gpt4 book ai didi

bash 脚本无法按预期匹配文件

转载 作者:行者123 更新时间:2023-11-29 09:41:12 24 4
gpt4 key购买 nike

我编写了一个小的 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”并且在循环期间 $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

关于bash 脚本无法按预期匹配文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com