您的位置:首页 > 运维架构 > Shell

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

2011-12-11 17:52 567 查看

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的使用,请参考:/article/7987196.html

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


4 使用rsync

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

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


-z :加上压缩的参数!
-e :使用的通道协定,例如使用 ssh 通道,则 -e ssh
用rsync对网站进行镜像备份:/article/7987194.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: