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


0

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

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

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


Мета-примечание: нет такого понятия, как «второй ответ». Любой пользователь может самостоятельно заказать ответы «голосами», «старейшими» или «активными»; голоса меняются, активность обновляется ...
Kamil Maciorowski

@KamilMaciorowski мой плохой, исправил вопрос и сослался на 2-й голосом, который, поскольку вопрос старый, вероятно, будет вторым ответом на некоторое время.
Alerra

Ответы:


1

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

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

Таким образом, он работает с одним архивом за раз, дополнительные аргументы являются членами. Вы, очевидно, не хотите указывать участников.

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

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

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

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


Вот Это Да! Спасибо за подробный и быстрый ответ. Я также рад узнать, что мой первоначальный ответ был не так уж и далек.
Alerra
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.