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

本文详细介绍了使用Shell脚本进行目录复制的四种方法:cp -Rp命令、tar命令、find命令以及rsync命令,涵盖了不同场景下的目录复制需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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.youkuaiyun.com/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:允许复制点文件,并保持所以权限、所有权和修改时间。
注意,如果删除了/src/dir/ 中的后一个/,则会将复制 /src/dir 目录本身

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

-z :加上压缩的参数!
-e :使用的通道协定,例如使用  ssh 通道,则  -e ssh



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值