Shell 脚本专家指南 学习笔记3 目录的复制


1 使用cp

cp -Rp * /dest/dir

-R:递归复制目录结构
-p:保持原始文件的访问权限、所有权和访问修改时间
问题:没有使用原始文件的创建时间,而是使用了执行复制时的修改时间;不能保持硬链接
 使用-a选项,尽可能多地保持了源文件的特性,包括硬链接
cp -a * /dest/dir

2 使用tar

tar -cvf - * | (cd /dest/dir && tar xvfp -)
-:通过管道将输出发送到标准输出
问题:通配符*并未包含隐藏在源目录中的所有文件,它遗漏了点(隐藏)文件

3 使用find

find . -depth | xargs tar -cvf - | (cd ../tar_cp/ && tar xvfp -)

-depth:该选项解决了目录不可写或者不可查找的权限问题;对于后者,可采取先处理目录内容再处理目录本身的方法来解决。
不仅在单机上,还可以通过ssh在网络间进行复制。
find . -depth | xargs tar -cvf - | ssh machine_name `cd /dest; mkdir dir; tar xvfp -`
或者:
find . -depth | cpio  -dampv {/dest/dir}
cpio选项意义如下:
-d:创建需要的目录
-a:重置源文件的访问时间
-m:保护新文件的修改时间
-v:列出已处理文件,展示进展状况
-p:将cpio设为“copy pass-through"模式
更多关于cpio的使用,请参考: http://blog.csdn.net/ysdaniel/article/details/7059990

也可将cpio与ssh联系起来用:
find . -depth | ssh machine_name `cpio  -dampv /dest/dir`

4 使用rsync

rsync -av /src/dir/ /dest/dir		##不会复制/src/dir 目录本身
-a:允许复制点文件,并保持所以权限、所有权和修改时间。
关于rsync的使用,请参考 :http://blog.csdn.net/ysdaniel/article/details/7059958
注意,如果删除了/src/dir/ 中的后一个/,则会将复制 /src/dir 目录本身

通过网络向远程机器执行复制操作:
rsync -avz -e ssh user@remotehost:/src/dir /local/dest/dir

-z :加上压缩的参数!
-e :使用的通道协定,例如使用  ssh 通道,则  -e ssh
用rsync对网站进行镜像备份:http://blog.csdn.net/ysdaniel/article/details/7059973



你可能感兴趣的:(网络,shell,脚本,ssh,user)