按文件复制目录树文件

时间:2009-10-15 00:50:10

标签: bash command-line recursion copy tar

我的顾问经常将一堆软件编译到他/ usr / local中,然后将他/ usr / local作为tarball分发。然后我将tarball提取到我们的实验室机器上供我们使用。到目前为止,这个工作正常,我们只需用tarball的内容替换旧的/ usr / local。

但我已经开始在这些机器上安装我自己的软件了。如果我删除/ usr / local,显然有些软件和配置也会被删除。

相反,我如何递归地将tarball中的文件复制到/ usr / local中的相应目录中?

例如:

tarball path            filesystem path
------------            ---------------
local/bin/myprog   ->   /usr/local/bin/myprog
local/lib/mylib.so ->   /usr/local/lib/mylib.so

或者这对ServerFault来说是一个更好的问题吗?

3 个答案:

答案 0 :(得分:1)

$ cd /usr
$ tar xvf f.tar

$ cd /tmp
$ tar xvf f.tar
$ cp -R local/. /usr/local/.

尽管如此,我认为它应该只是放在其他目录中,或者放在/usr/local/的子目录中。除了/usr/local/之外,没有任何神奇的东西可能是默认的PATH组件。

答案 1 :(得分:1)

cp命令具有-r标志,用于递归复制:

$ cp -r local/* /usr/local/

请查看系统的cp手册页以获取更多信息。

答案 2 :(得分:0)

使用k选项并指定目的地以防止覆盖文件:

$ cd /usr 
$ tar xvfk localtarball.tar local
local/
local/file
tar: local/file: Cannot open: File exists
local/bar2/
local/bar2/bar3
tar: local/file: Cannot open: File exists
local/bar2a/bar2aY/
tar: Error exit delayed from previous errors