LINUX.ORG.RU

Нужен bash скрип для перебора папок и создания архивов

 , ,


0

1

Доброй день.

Нужен bash скрип, который будет обходить и проверять файлы в каталогах и создавать архивы.

Ситуация такая, есть папка lengings в ней есть файла и папки

Нужно

  1. Перебрать все каталоги в каталоге lengings, которые не являются скрытыми, файлы тоже проигнорировать.
  2. В каждом из полученных каталогов есть файл, во всех каталогах, путь к нему одинаковый. Например [полученный каталог + /dist/index.html]
  3. Нужно проверить существует ли такой файл вообще.
  4. Если он существует, тогда нужно проверить, существует файл по такому же адресу, только с расширением .gz (например index.html.gz)
  5. Если оригинал существует и НЕ существует файла с расширением .gz, тогда нужно создать файл архив с таким же именем и расширением .gz

Подскажите пожалуйста Centos 7

Обязательно на баше?

Имхо, на питоне будет понятней и читабельней. Если питоном пригодно, то смотри док по os.walk.

frunobulax ()
Ответ на: комментарий от XoFfiCEr

Чем он плох? Я не экспрет, но мне кажется шагалка – наиболее наглядный, интуитивно понятный способ.

for root, dirs, files in os.walk(os.getcwd()):

И делай там уже что нужно – гуляй по каталогам, проверяй наличие файла, архива и т.п. что там ТС-у нужно.

Мне периодически мои тетушки подкидывают подобного плана задачки, какой-нибудь ворох файлов разобрать по датам создания, например, или еще по каким признакам. В этом плане мне питон люб тем, что даже полгода назад написанный код прекрасно читается и легко адаптируется под новую задачу. С башем приходится полдня хорошенько так покурить всякого.

Учитывая то, что ТС даже набросков не представил, предположу что баш для него так же малоизвестен как и питон.

frunobulax ()
Ответ на: комментарий от frunobulax

он три списка формирует ЕМНИП, каталоги, каталоги с файлами, файлы. Разобраться не так то просто. Например чтобы получить общий размер файлов придется потрудится.

XoFfiCEr ★☆☆☆ ()
Ответ на: комментарий от XoFfiCEr

Корешок, каталоги и файлы же. Если какая-то переменная не нужна, в цикле вместо имени _ и не будет глаза мозолить.

В задаче ТС-а ничего нет про общий размер. С ходу не скажу, но для этого, наверняка другие инструменты есть.

А ТС-у как раз нужно обработать структуру с определенной вложенностью, поэтому таки настаиваю. :)

frunobulax ()
Последнее исправление: frunobulax (всего исправлений: 1)
Ответ на: комментарий от frunobulax

os для работы с файлами уже давно не рекомендуется, если он еще не deprecated. Сейчас все через pathlib.

anonymous ()
Ответ на: комментарий от anonymous

вот за это большое спасибо чувак, ну os.sep наверное неизменно будет использоваться.

XoFfiCEr ★☆☆☆ ()
Ответ на: комментарий от frunobulax

Мне надо было turbobulax вывести размер файлов а не ТСу.

XoFfiCEr ★☆☆☆ ()
Ответ на: комментарий от anonymous

Хм. А где можно почитать?

Тут вроде нет ос-а:

https://www.python.org/dev/peps/pep-0004/#deprecated-modules

И поверхностный гуглинг тоже ничего не показал.

@XoFfiCEr я понял, что это тебе нужно было, а не ТС-у. :)

Но мы же в его топике и обсуждаем его проблему, так?)

frunobulax ()

Лучше в job и лучше писать на python а не на bash.

XoFfiCEr ★☆☆☆ ()

Тупо в лоб:

#!/bin/sh

for f in `find ./lengings -path '*/.*' -prune -o -type d -print`; do
    if [ -e $f/dist/index.html -a ! -e $f/dist/index.html.gz ]; then
        gzip $f/dist/index.html
    fi
done

PS: сломается на пробелах в именах файлов/каталогов, лучше намутить с xargs, но сейчас лень.

beastie ★★★★★ ()
gzip -9qk lengings/*/dist/index.html < /dev/null
spirit ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.