Я хочу применить функцию 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 от обмена стеками, и так далее!
Delete some entries of a list or array in 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
Большое спасибо, насчет XY, если бы я так не поступил, люди сказали бы "а что ты пробовал?", "это не воспроизводимо" и т.д. :) И, вдобавок ко всему, теперь я научился две вещи с 1 вопросом :D
В первой строке упоминается Python, но я больше ничего не вижу о Python, и смысл не ясен. Будет ли это так же точно, если вы просто отредактируете это?