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

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

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

1 ответ1

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 чтобы узнать разницу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .