卡皮巴拉 / 幂等复制文件夹
今天一直在忙卡皮巴拉,as expected。
我决定在网络共享家目录下放一个装满配置脚本的「控制面」目录,然后直接执行所需的命令不要借助卡皮巴拉中的Makefile。这一方面是因为基于这些Makefile的方案实在舍近求远,另一方面在卡皮巴拉目录下控制父目录下别的文件夹属实有点屎山了。
脚本都写的差不多了,顺便(也许是又一次)解决了一个经年累月的烦恼。
复制文件的命令有两种选择
1
2
cp foo bar/
cp foo bar/foo
两者都是foo -> bar/foo
这个样子。
如果要复制为另一个名字的就只能用后者
1
cp foo bar/foo2
不过不管怎样,这个命令重复执行多少遍,结果都是和只执行一遍是一样的,即幂等。
可是如果foo
是一个文件夹的话
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ tree .
.
├── bar
└── foo
└── baz
$ cp -r foo bar/foo2
$ tree .
.
├── bar
│ └── foo2
│ └── baz
└── foo
└── baz
$ cp -r foo bar/foo2
$ tree .
.
├── bar
│ └── foo2
│ ├── baz
│ └── foo
│ └── baz
└── foo
└── baz
好在再接着怎么执行也不会变了,但是这也够烦人了。
更不用提我在网络文件系统里成功搞出了自己复制自己,从而每执行一次加深一层的究极操作……
一般来说,要不然就复制之前检查一下存在性,要不然就强制删除一下。不过还有更简单的办法
1
cp -rT foo bar/foo2
这样就是幂等的了。
本文由作者按照 CC BY 4.0 进行授权