如何将目录复制到自身中?

And*_*man 9 command-line directory cp

我可以像这样复制一个目录:

~$ cp -r ./Desktop/ /tmp/
Run Code Online (Sandbox Code Playgroud)

同样,如果我只想从目录中复制文件,我可以这样做:

~$ cp -r ./Desktop/. /tmp/
Run Code Online (Sandbox Code Playgroud)

如果我想将源目录复制到目标目录(源的子目录)中,事情会变得更加棘手。即复制一个目录到它自己。例如:

~$ cp -r ./Desktop/ ./Desktop/sub/
Run Code Online (Sandbox Code Playgroud)

会抛出以下错误:cp: cannot copy a directory, './Desktop/', into its own, './Desktop/sub/'

这可以在某种程度上使用 extglob 进行导航,如下所示:

~$ cp -r ./Desktop/!(sub) ./Desktop/sub/
Run Code Online (Sandbox Code Playgroud)

但是,最后一个命令依赖于已经存在的目录

您如何将目录复制到自身中,以这样的方式执行此操作的命令同时创建子目录?

Rav*_*ina 13

使用rsync代替cp

rsync -Rr ./Desktop/ ./Desktop/sub/
Run Code Online (Sandbox Code Playgroud)

让我们测试一下:

$ cd /tmp
$ mkdir -p Desktop/sub
$ touch Desktop/a-file
$ ls -F Desktop
a-file sub/
$ cp ./Desktop ./Desktop/sub
cp: cannot copy a directory, './Desktop', into itself, './Desktop/sub/Desktop'
Run Code Online (Sandbox Code Playgroud)

但是rsync会正常工作:

$ rsync -Rr ./Desktop/ ./Desktop/sub/
$ ls -F Desktop/sub/
Desktop/
Run Code Online (Sandbox Code Playgroud)