Удалить некоторые записи списка или массива в bash - PullRequest
1 голос
/ 10 апреля 2019

Я хочу применить функцию 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.

Как я могу это сделать?

Я пробовал здесь вещи, которые не работали для меня: решение 1 из стека через поток или же решение 2 из стека обмена , так далее!

1 Ответ

1 голос
/ 10 апреля 2019

Удалить некоторые записи списка или массива в bash

Просто зациклите и сопоставьте:

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

Однако это ответ на ваш XY вопрос , а не то, что вы должны делать.

Более разумным способом было бы не добавлять их в первую очередь, добавив такую ​​проверку в ваш цикл, а еще более разумным способом было бы просто find исключить их:

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