文章大纲

cp命令复制文件夹到另一个文件夹的注意事项

2019年11月24日 15:59

最近发现之前写好的shell脚本里cp命令拷贝文件夹,丢失了一层文件夹。才发现cp命令里还有一层这么容易让人混淆的用法,为避免继续踩坑,特此记载。


现在假定文件存在的目录如下面所示:

--from

--from/fone

--from/fone/hello.txt


--to


现要将from文件夹之下的所有目录拷贝到to文件夹之下,使用时就会遇到极易混淆的如下4条命令:

cp -rf from/ to
cp -rf from/ to1
cp -rf from/* to
cp -rf from/* to1


第一种:

cp -rf from/ to

from整个文件夹都拷贝到to文件夹里去了。

--to

--to/from

--to/from/fone

--to/from/fone/hello.txt


第二种:

cp -rf from/ to1

to1代表本来不存在的文件夹。

结果:

from文件夹没有拷贝到to里面去。

--to1

--to1/fone

--to1/fone/hello.txt


第三种:

cp -rf from/* to

结果:

和第二种一样,没有复制from文件夹到to文件夹里面去。

--to

--to/fone

--to/fone/hello.txt


第四种:

cp -rf from/* to1

结果:

to1下只有最里层的文件。

--to1

--to1/hello.txt


经过实践,上面命令格式可以统一为:

cp -rf source target

无论target后面带不带斜杠/,系统都认为它是目录。


不相信你就这样试一下:

cp -rf from to1.txt

查看to1.txt文件属性,就是文件夹。


总结:cp -rf source target 命令中target一定是文件夹


本文是翟码农个人博客蓝翟红尘里Linux分类下的有关cp命令使用的文章,转载请注明出处:http://www.zhai14.com/blog/3e80a6d8a0603dc3f930c62b8e0eb56a.html


由以上4种情况可以得知,当业务中目标文件夹可能存在或不存在时,没有哪一条命令是在两种情况下可以同时使用的,最好的解决办法就是确保目标文件夹一定存在。

拿上面的例子来说,就是拷贝from里面的文件夹之前,先把to文件夹生成好。

mkdir -p to


以上4种易混淆的命令,为了加深记忆,我也顺便总结了一下:

记忆诀窍:

source里带*的一定是不包含source当前这一层文件夹的。

source里带*的,且target目标目录不存在的,是最特殊的情形:只拷贝最里层的文件。


综上所述,拷贝文件夹的业务,我们以后就通过两条命令的思路来实现就完全OK了。


1.不拷贝source里当前的目录到target里去,即不拷贝from文件夹到to里面:

mkdir -p to
cp -rf from/* to


2.要拷贝source里当前的目录到target里去,即to里面要有from这一层文件夹:

mkdir -p to
cp -rf from/ to



  • 2019年11月23日 23:07文章创建
  • 2019年11月23日 23:44文章发布
  • 2019年11月24日 15:59文章下架
  • 2019年11月24日 15:59文章发布
我要评论
«-必填,限2-20个字符,中文/字母/字母数字组合
«-评论后,邮箱会收到激活链接,未激活邮箱的留言,将无法显示
评论列表
暂无评论,期待你的评论哦!
回到顶部