Это немного длиннее, но мне всегда нравится найти
, когда я хочу уточнить. Это должно сохранить структуру и игнорировать каталог img.
find ./static -type d ! -name 'img' -exec rm -f {}/* \;
Подробное описание того, что происходит
find
Команда
./ static
, указывающая, где искать
type -d
Выделение каталогов
! -name 'img'
Игнорирование img dir
-exec rm -f {} / * \:
{}
заменяются найденными именами каталогов, и команда выполнен.
Нет, в bash
это невозможно.
Чтобы ускорить сценарий, попробуйте переосмыслить поток и логику программы. Очень очень редко возникает необходимость считывать огромные объемы данных в переменной или массиве.
Большинство инструментов Unix представляют собой фильтры, которые позволяют отправлять данные с одного этапа конвейера на другой, не сохраняя в памяти слишком много начальных или промежуточных данных (, часто просто по одной строке из файла за раз ). ].Необычно читать набор данных в переменную, а затем манипулировать им в оболочке. Более распространено выполнение преобразований данных с возможным агрегированием их частей.
Если вы обнаружите, что обрабатываете переменные оболочки, содержащие более нескольких слов, то, скорее всего, есть более эффективный способ сделать это.