bash:根据文件夹名称的模式对文件夹进行操作

bash:根据文件夹名称的模式对文件夹进行操作

我正在处理位于包含许多文件夹的目录中的特定文件夹的选择,其名称采用以下语法:prot_cne_ligNNN(其中NNN是从1到1000的数字)

我需要一个 bash 脚本,它将选择所选数字的文件夹(在 NNN 中给出),然后将其复制到另一个文件夹

# define the list on numbers, which directories will be coppied
# meaning that I need to take a directory prot_cne_lig331, prot_cne_lig767, prot_cne_lig998
list=['331','767','998']
for system in ${somewhere}/*
system_name=$(basename "$system")
   if system_name == '*one_of_the_element_from_the_list*'
   cp $system $desired_output_folder
   fi
done

所以这里我需要准确定义 IF 语句,适合检查文件夹名称是否包含列表中提到的数字之一

答案1

似乎迭代列表比迭代目录中的所有名称并根据列表测试每个名称更容易。

list=( 331 767 998 )

for number in "${list[@]}"; do
    cp -r "$somewhere/prot_cne_lig$number" "$destdir"
done

请注意在 中定义数组的语法bash

或者,没有单独的数组变量,

for number in 331 767 998; do
    cp -r "$somewhere/prot_cne_lig$number" "$destdir"
done

或者,您可以使用

shopt -s extglob
cp -r "$somewhere"/prot_cne_lig@(331|767|998) "$destdir"

其中是与括号中的模式匹配的@(331|767|998)扩展通配模式(因此)。shopt -s extglob

相关内容