在bash中删除列表或数组的某些条目

时间:2019-04-09 23:58:10

标签: arrays bash list command-line remove-if

我想对给定目录的子目录中的所有文件应用Python函数。

在bash .sh文件中,我列出了所有文件,如下所示:

dir_list=()
while IFS= read -d $'\0' -r file ; do
dir_list=("${dir_list[@]}" "$file")
done < <(find give_directory_Here -mindepth 2 -maxdepth 2 -type d -print0)

但是,有些目录带有模式,可以说模式是unwanted_pattern,其名称是我想从dir_list中删除的。

我该怎么做?

我在这里尝试了一些不适合我的事情: solution 1 from stack over flow 要么 solution 2 from stack exchange,依此类推!

1 个答案:

答案 0 :(得分:1)

  

删除bash中列表或数组的某些条目

只需循环并匹配:

   result=()
   for file in "${dir_list[@]}"
   do
     if [[ "$file" != *"unwanted_pattern"* ]]
     then
       result+=("$file")
     fi
   done
   dir_list=( "${result[@]}" )

但是,这是您XY question的答案,而不是您应该做的事情。

更聪明的方法是不通过将这样的检查添加到循环中来首先添加它们,而更聪明的方法是仅find排除它们:

find give_directory_Here -mindepth 2 -maxdepth 2 -type d ! -path '*unwanted_pattern*' -print0