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

Почему я получаю "rvm: команда не найдена" на Ubuntu?
Как установить и использовать ZSH с Ubuntu shell на Windows 10
Bash: получение сообщений от фонового процесса
tar: не удается создать символическую ссылку: файл существует
Bash скрипт для редактирования имени файла и перемещения файла.
Как фильтровать вывод команды в OS X
Подсистема Windows для Linux без магазина Windows [дубликат]
iTerm2: получить номер вкладки из оболочки bash
Нет необходимости в экспорте при выполнении функций в subshell
Как удаленно записать в файл с помощью SSH
Как использовать "progress-bar.sh" для отображения хода выполнения операций, выполняемых на удаленных серверах
невозможно выполнить: слишком много уровней символьных ссылок
$ logout bash: выход: не войти оболочка: использовать выход'
Как изменить / добавить трекер.торрент-файл с помощью командной строки?
При запуске ' rm-rf` можно ли исключить некоторые подкаталоги?

Рекурсивно выполнить команду Linux 'ar'

у меня есть каталог с сотнями подкаталогов со многими .lib-файлы в них. Я могу использовать ar -x filename.lib команда для распаковки одного из них, но мне было интересно, как это сделать рекурсивно, так как нет встроенного рекурсивного флага в соответствии с man ar. Прямо сейчас я пытаюсь сделать

find . -name '*.lib' -exec ar -x {} +

но я получаю сообщение о каждом файле no entry filename.lib in archive. Я googled эту ошибку, но я не мог найти ничего соответствующего, и мой текущий метод сделать это основан на этой ответы на вопрос (а именно 2-й и его комментарии), но явно не работает. Есть идеи, что я делаю неправильно?

5
задан Alerra
источник

1 ответов

man 1 ar говорит, что синтаксис

ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] archive [member...]

так он работает с одним архивом за раз, лишние аргументы членов. Очевидно, что вы не хотите указывать членов.

find … -exec … {} + заменяет {} С mutliple пути. Избыточные пути интерпретируются как члены ar. Тебе нужен find … -exec … {} … \;, который заменяет {} только один путь.

find . -name '*.lib' -exec ar -x {} \;

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

Примечание: -execdir может или не может быть лучше для вас. Обратитесь к man 1 find чтобы понять разницу.

1
отвечен Kamil Maciorowski 2018-07-12 19:50:34
источник

Другие вопросы bash command-line linux