Как сжать все файлы из всех подпапок, если в подпапке нет `Archive.zip`?

Чтобы отфильтровать строки с разным количеством значений, разделенных запятыми, в 3-м и 4-м полях:

awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in

Функция awk split разделит данное поле на регулярное выражение в его третьем аргументе (запятая в данном случае) и сохранит сгенерированные поля в массиве во втором аргументе (a здесь). Мы не используем результирующий массив, а вместо этого используем тот факт, что split также возвращает количество сгенерированных элементов массива.

Если эти числа (nc3 и nc4) совпадают, строка будет напечатана.

0
27.08.2017, 12:03
1 ответ

Что-то вроде этого?

find . -type d -name data \
    \! -exec test -f {}/Archive.zip ';' \
    -execdir zip -rj data/Archive.zip data ';'

Это позволит найти каждый каталог data(первая строка).

\! -exec test -f {}/Archive.zip ';'отфильтрует любой каталог data, который не содержит файла с именем Archive.zip.

Эту строку можно заменить на \! -execdir test -f data/Archive.zip ';'.

Последний -execdirбудет выполнять данную команду zipиз родительского каталога каталога data. Это создаст data/Archive.zip, содержащий файлы в data(без пути, прикрепленного к архивным именам файлов).

Это похоже на мой ответ на ваш предыдущий вопрос, но со вставленным тестом на существование data/Archive.zip.

3
28.01.2020, 02:24

Теги

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