KOMPX.COM or COMPMISCELLANEA.COM   

Распаковать несколько архивов

Распаковать с помощью unzip в командной строке Linux несколько zip-архивов в один каталог. Вопреки возможным ожиданиям, unzip *.zip работать не будет, *.zip необходимо взять в кавычки:


unzip "*.zip"

В архивах могут быть файлы с одинаковыми именами. Чтобы избежать перезаписи:


unzip -B "*.zip"

Unzip -B в процессе распаковки перезаписывает файлы с одинаковыми именами, но сохраняет их резервные копии. Новые имена для этих файлов создаются добавлением тильды ("~") в конец изначальных названий файлов. Если имеется расширение, то "~" добавляется после него. Если этого недостаточно, после тильды ("~") прибавляется уникальная последовательность цифр (до 5 знаков).

Unzip -B не слишком рабочее решение. Например, поскольку диапазон последовательностей цифр может израсходоваться (99999 знаков, или 65535 для 16-битных систем), резервный файл с максимальным числом диапазона после "~" в названии стирается и замещается без уведомления новой резервной копией ( Более подробно ). Число файлов в архиве может быть не всегда известно заранее или оно может быть больше диапазона доступных чисел, так что Unzip -B не лучший вариант. Переименование файлов с одинаковыми именами с помощью добавления "~" в конце имен, после расширения тоже не слишком удобно.

Но другой встроенный вариант еще хуже. Если модификатор -B не используется, то каждый раз, как распаковывается файл с таким же именем как уже был извлечен, unzip спрашивает replace example.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: ("заместить example.txt? да, нет, все, ни один, переименовать:"). Каждый раз нужно нажимать на "r" и каждый раз вводить новое имя. Так что для решения проблемы вероятно следует создать и использовать какой-то скрипт, bash или иной.

Операционные системы
Ещё