Вопрос или проблема
У меня есть более 200 архивов .zlib, и я хочу распаковать их с помощью одной команды в консоли Linux. Я никак не могу правильно составить команду. Может, кто-то сможет помочь:
for z in *.zlib; do; zlib-flate -uncompress < $z > $z ; done
Когда я запускаю эту команду, каждый файл оказывается пустым. Мне не важен выходной файл, так что это может быть просто счетчик или добавленная строка, например. Огромное спасибо!
Что происходит, так это то, что часть > выполняется первой и создает новый пустой файл для сбора вывода, но этот процесс уничтожает исходные данные.
Чтобы исправить это: явно используйте другое имя файла для вывода.
for z in *.zlib; do; zlib-flate -uncompress < "$z" > "${z%.zlib}" ; done
Здесь "${z%.zlib}"
удаляет .zlib
с конца имен файлов.
Ответ или решение
Чтобы разархивировать множество архивов в формате .zlib с помощью одной команды в консоли Linux, вы можете использовать следующий скрипт bash. Основная проблема в вашем первоначальном подходе заключалась в том, что вы перенаправляли вывод в файл с тем же именем, что и входной файл, в результате чего входной файл становился пустым, прежде чем вы успевали его обработать.
Для решения этой проблемы необходимо явно использовать другое имя для выходного файла. Следующий пример кода демонстрирует, как это сделать:
for z in *.zlib; do
zlib-flate -uncompress < "$z" > "${z%.zlib}"
done
Здесь используется конструкция ${z%.zlib}
, которая удаляет расширение .zlib из имени файла, чтобы сохранить разархивированные данные в файлы с таким же именем, но без этого расширения.
Пошаговое объяснение:
-
Цикл for:
for z in *.zlib; do
— этот цикл перебирает все файлы с расширением .zlib в текущем каталоге и последовательно обрабатывает каждый из них. -
Команда zlib-flate:
zlib-flate -uncompress < "$z"
— эта команда используется для разархивирования содержимого файла. Входной файл обозначается как"$z"
. -
Перенаправление вывода:
> "${z%.zlib}"
— это часть команды, которая перенаправляет разархивированные данные в файл с тем же именем, но без расширения .zlib. Это делает его легким для идентификации и устранения путаницы. -
Закрытие цикла:
done
— это завершает цикл.
Этот способ эффективно разархивирует все .zlib файлы в вашем текущем каталоге с минимальными усилиями и без потери исходных данных. Просто запустите приведенный скрипт в терминале, и все ваши архивы будут разжаты.