我有一个目录,里面有数百个子目录,其中包含许多 .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
了解其中的区别。