今天在写脚本的时候,碰到了一个很不常见的问题,就是关于文件拷贝的问题,具体情况且听我慢慢道来。
我的需求:
我使用 cp src/* dest/ 拷贝过去之后发现,软连接仍然是软连接,于是我开始使用 man cp 看cp命令的参数,发现有 -d 参数,是保留软连接文件的。这就尴尬了,我明明没有使用 -d 参数,同样是保留了软连接文件。然后根据 cp 命令的man手册内容,尝试了一番,结果失败告终。
然后开始使用百度,必应搜索了(公司网上不了Google)。发现都是 说怎么保留软连接文件的教程,无非是加参数 -d 。这看man手册都清清楚楚了还用搜索。。。。这跟我的目的完全相反,我是需要拷贝软连接文件的时候拷贝源文件,不保留软连接文件。
网络搜索了好久,发现了一个可用的信息,说是scp 命令在拷贝的时候,不会保留软连接文件。 scp 命令是进行跨服务器进行拷贝文件的,还真没试过在本机上拷贝文件,于是我尝试了一下。发现命令执行后一直卡着。没办法 ctl+c结束之后发现,一点都没有拷贝,scp 应该是不能再本机上进行拷贝的。
现在 cp 不行, scp 也不行,那就只能再找找能拷贝文件的命令了。
你还别说,还真有一个命令,就是 rsync 命令。这个命令是我之前过滤拷贝文件使用过的。然后我就尝试使用rsync命令拷贝了一下,发现拷贝的过程中,软连接文件直接丢弃了,没有拷贝。软连接文件都没有拷贝,更别说源文件了。而且目录下的目录文件也是跳过不拷贝的。
是不是有什么参数可以控制呢? man了一下rsync命令,发现 参数 -a 可以拷贝目录。于是 rsync -a 命令试了一下,确实可以拷贝目录文件。但是软连接文件还是被丢弃不拷贝。man手册中海油一个参数 -L 说是吧软连接当成普通文件进行处理。试了一下,rsync -aL xxx xxx 。喜大普奔,果然可以,问题解决。
总结一下:
拷贝带有软连接的文件时,如果想保留软连接文件,可以在cp 命令后面加 -d 来保留软连接。同样,如果我们想在拷贝软连接文件的时候,直接拷贝软连接指向的源文件,那么就要使用 rsync -aL 进行拷贝。
这个是我工作中花了两个多小时踩得坑。如果有好的操作方法,请给我后台留言,感激不尽。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有