前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell---cp命令的一些坑和其替代品

shell---cp命令的一些坑和其替代品

作者头像
HeaiKun
发布2020-07-07 11:24:57
3.1K0
发布2020-07-07 11:24:57
举报
文章被收录于专栏:HeaiKunHeaiKun

今天在写脚本的时候,碰到了一个很不常见的问题,就是关于文件拷贝的问题,具体情况且听我慢慢道来。

我的需求:

  1. 将某一目录下的所有文件拷贝到另一个目录下。
  2. 该目录下包含一些软连接文件,软连接的源文件也在该目录下。
  3. 拷贝过程中不保留软连接,软连接文件要拷贝成源文件。

我使用 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 进行拷贝。

这个是我工作中花了两个多小时踩得坑。如果有好的操作方法,请给我后台留言,感激不尽。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HeaiKun 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档