Вопрос или проблема
У меня есть bash-скрипт, который извлекает файлы из .rar файла. Я хочу извлечь только *.foo
и mydirectory/*.bar
. Я следовал этой инструкции по извлечению конкретных файлов с помощью подстановочных символов, чтобы получить первую группу файлов, но это не сработало для второй. Я пробовал использовать unrar -x blah.rar mydirectory/\*.bar
(и просто *), но это ничего не дало, и unrar -x blah.rar mydirectory
, что просто дало мне пустую директорию с именем mydirectory/
. Оставив последний слэш, я также ничего не получил.
Ответ или решение
Для извлечения специфических файлов из .rar архива с использованием bash-скрипта, важно понимать, как работает команда unrar
. Давайте рассмотрим, как можно эффективно извлечь файлы с расширением *.foo
и файлы из директории mydirectory/
с расширением .bar
.
Понимание команды unrar
Команда unrar
предоставляет множество опций для работы с архивами. Для извлечения определённых файлов из архива необходимо использовать правильный синтаксис, что особенно важно при работе с шаблонами и подкаталогами.
Извлечение файлов с расширением *.foo
Для извлечения всех файлов с расширением .foo
из архива, команда будет выглядеть следующим образом:
unrar e blah.rar *.foo
В этом случае флаг e
означает извлечение файлов в текущую директорию. Обратите внимание, что команду нужно выполнять в том каталоге, где находится архив.
Извлечение файлов из подкаталога mydirectory/
Здесь стоит учесть, что при извлечении файлов с использованием подкаталогов, вам может понадобиться указать полный путь к файлам в архиве. Стандартная команда для извлечения всех .bar
файлов из mydirectory/
будет следующей:
unrar e blah.rar mydirectory/*.bar
Однако, если вы сталкиваетесь с проблемой, что директория пустая или файлы не извлекаются, убедитесь, что файлы действительно присутствуют в архиве. Для этого можно выполнить следующую команду для просмотра содержимого архива:
unrar l blah.rar
Объединение команд для извлечения
Вы можете объединить оба запроса в вашем скрипте, чтобы одновременно извлечь и файлы с расширением .foo
, и файлы из mydirectory/
с расширением .bar
. Это возможно благодаря следующему:
unrar e blah.rar *.foo
unrar e blah.rar mydirectory/*.bar
Использование циклов в скрипте
Если вы хотите выполнять это в рамках одного скрипта, можно использовать цикл или последовательные команды, чтобы убедиться, что оба типа файлов извлечены. Ваш скрипт может выглядеть так:
#!/bin/bash
# Извлекаем .foo файлы
unrar e blah.rar *.foo
# Извлекаем .bar файлы из mydirectory
unrar e blah.rar mydirectory/*.bar
Заключение
При работе с командами на bash важно проверять наличие необходимых файлов в архиве и использовать правильный синтаксис. Убедитесь, что используете актуальную версию unrar
, так как разные версии могут вести себя по-разному. Проверьте содержимое архива, чтобы удостовериться в корректности путей и имен файлов. Следуя данным рекомендациям, вы сможете успешно извлечь необходимые файлы из архива.