linux cp拷贝一个文件到另一个目录,cp命令复制文件夹到另一个文件夹的注意事项 - 翟码农技术博客...

最近发现之前写好的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一定是文件夹

由以上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文章发布

你可能感兴趣的:(linux,cp拷贝一个文件到另一个目录)