Как найти файл с заданной строкой в ​​нескольких каталогах?

В цикле:

shopt -s nullglob

files=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    files+=( $pattern )
done

Это повторяет числа и создает для каждого шаблон подстановки имени файла. Шаблон расширяется, чтобы добавить имена файлов, соответствующие ему, в массив files. Параметр оболочки nullglobзаставляет не -совпадающие шаблоны расширяться до нуля (, а не оставаться нерасширенными ).


Использованиеfind(для рекурсии во все каталоги ниже текущего каталога и для выполнения некоторых действий с каждым найденным файлом):

patterns=()
for number in "${clipnumbers[@]}"; do
    printf -v pattern 'clip%s-*.png' "$number"
    patterns+=( -o -name "$pattern" )
done

find. -type f \( "${patterns[@]:1}" \) -exec action-to-perform-on-files {} \;

:1удаляет начальный -oиз списка в patternsв расширении.

Это сочетает в себе поиск файлов с выполнением над ними некоторых действий. Это потерпит неудачу, если ваш clipnumbersмассив содержит много тысяч чисел, (список аргументов станет слишком длинным ).

1
16.07.2021, 12:14
0 ответов

Теги

Похожие вопросы