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

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

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

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

3
задан Alerra
12.01.2023 8:56 Количество просмотров материала 2416
Распечатать страницу

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 2023-01-13 16:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх