如何将文件名为filename.a的AR归档文件移动到不同的目录?

17

是否有一种AR选项可以将对象提取到另一个目录?有没有办法将它们提取到tmp下面?

[test]# ls -l
total 1828
-rw-r--r-- 1 root root 1859628 Aug 24 02:10 libclsr11.a
drwxr-xr-x 2 root root    4096 Aug 24 02:12 tmp
[test]# ar x libclsr11.a
[test]# ls -l
total 3760
-rw-r--r-- 1 root root  157304 Aug 24 02:13 clsrcact.o
-rw-r--r-- 1 root root   19304 Aug 24 02:13 clsrcclu.o
-rw-r--r-- 1 root root   55696 Aug 24 02:13 clsrccss.o
..
drwxr-xr-x 2 root root    4096 Aug 24 02:12 tmp
[test]#
2个回答

18

解决方案取决于ar的版本。您可以使用ar --version命令显示系统上ar的版本。

对于版本低于2.34的ar / GNU binutils:

不幸的是,在版本低于2.34的情况下,ar没有提供指定文件提取目录的方法。(至少我没有找到。)它总是使用当前目录。但是,有一个简单的解决方法:在提取之前切换到目标目录,并使用相对路径来访问存档文件:

# cd ./tmp/
# ar x ../libclsr11.a

按照这种方法,您应该最终在./tmp/目录中得到clsrcact.o、clsrcclu.o和clsrccss.o文件。

对于ar / GNU binutils版本2.34或更高版本:

Binutils版本2.34引入了--output参数,用于ar程序。(请参阅更改日志。)它可以用于指定要提取内容的目录:

# ar x --output tmp libclsr11.a

这样一来,文档归档内容将会直接落入 tmp 目录中,而不必使用之前版本的 ar 的解决方法。


3

实际上是可能的,可能最近有所更改,--output选项就是你需要的。

以你的例子为例:

ar x libclsr11.a --output tmp

是的。--output选项是在2020年2月发布的ar/binutils 2.34版本中引入的,比最初的答案晚了三年以上。我已经更新了我的答案,以包括更近期版本的新选项。 - Striezel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接