Bash 逐个文件复制目录树文件

Bash 逐个文件复制目录树文件,bash,command-line,recursion,copy,tar,Bash,Command Line,Recursion,Copy,Tar,我的顾问经常将一组软件编译成他的/usr/local,然后将他的/usr/local作为tarball分发。然后我把焦油球提取到实验室的机器上供我们使用。到目前为止,这一切都很好,我们只是用tarball的内容替换旧的/usr/local 但我已经开始在这些机器上安装我自己的软件。如果我删除/usr/local,显然其中一些软件和配置也会被删除 相反,如何将文件从tarball递归复制到/usr/local中的相应目录中? 例如: tarball path filesyst

我的顾问经常将一组软件编译成他的/usr/local,然后将他的/usr/local作为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
等等

还是这是一个更好的问题

$ cd /usr
$ tar xvf f.tar


尽管如此,我认为它应该放在其他目录中,或者放在
/usr/local/
的子目录中。除了默认路径组件之外,
/usr/local/
没有任何神奇之处。

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

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

有关cp的详细信息,请查阅系统手册页。

使用
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

考虑到设置,在
/opt
甚至
/home/ryan/opt
下安装自己的软件不是更明智吗?
$ 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