递归执行 Linux ‘ar’ 命令

递归执行 Linux ‘ar’ 命令

我有一个目录,里面有数百个子目录,其中包含许多 .lib 文件。我可以使用命令ar -x filename.lib解压其中一个,但我想知道如何以递归方式执行此操作,因为根据 没有内置递归标志man ar。现在我正在尝试做

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

但我收到一条消息说,对于每个文件no entry filename.lib in archive。我在谷歌上搜索了这个错误,但没有找到任何相关内容,我目前的方法是基于问题的答案(即第二个问题及其评论),但显然它不起作用。有什么想法我做错了吗?

答案1

man 1 ar说语法是

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

因此它每次只能处理一个档案,额外的参数是成员。你显然不想指定成员。

find … -exec … {} +替代{}多重路径。过多的路径会被解释为成员ar。您需要使用find … -exec … {} … \;which 替换{}一个路径。

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

这样,找到的每个文件都会传递给分离 ar并满足仅一个档案的要求。

注意:-execdir可能对你更好,也可能不更好。请参阅man 1 find了解其中的区别。

相关内容