将所有名称为“ABC”的文件夹复制到另一个位置

dan*_*ang 2 command-line

我有 100 个文件夹,每个文件夹都有一个名为“ABC”的子文件夹。我想将“ABC”的文件夹结构和内容复制到另一个位置。

我怎样才能通过 Ubuntu 终端做到这一点?

Oli*_*Oli 9

我会使用类似这样的 find 命令来定位更深的 ABC 目录,然后mkdir -p处理目录结构,最后rsync镜像内容(如果你想在将来同步它,这特别有用)。

find . -mindepth 2 -maxdepth 2 -type d -name ABC \
-exec mkdir -p ../target/{} \; \
-exec rsync -a {}/ ../target/{}/ \;
Run Code Online (Sandbox Code Playgroud)

这是一个测试:

$ mkdir -p input/dir{1,2,3}/{ABC,DEF} target
$ touch input/dir{1,2,3}/{ABC,DEF}/file
$ tree
.
??? input
?   ??? dir1
?   ?   ??? ABC
?   ?   ?   ??? file
?   ?   ??? DEF
?   ?       ??? file
?   ??? dir2
?   ?   ??? ABC
?   ?   ?   ??? file
?   ?   ??? DEF
?   ?       ??? file
?   ??? dir3
?       ??? ABC
?       ?   ??? file
?       ??? DEF
?           ??? file
??? target

$ cd input # we need to be in the parent dir for this to work
$ find . -mindepth 2 -maxdepth 2 -type d -name ABC -exec mkdir -p ../target/{} \; -exec rsync -a {}/ ../target/{}/ \;

$ tree ../target/
../target/
??? dir1
?   ??? ABC
?       ??? file
??? dir2
?   ??? ABC
?       ??? file
??? dir3
    ??? ABC
        ??? file
Run Code Online (Sandbox Code Playgroud)

您也可以使用单个rsync命令执行此操作:

$ rsync -rv --include '*/ABC/' --include '*/ABC/*' --exclude '*/*' . ../target
sending incremental file list
dir1/
dir1/ABC/
dir1/ABC/file
dir2/
dir2/ABC/
dir2/ABC/file
dir3/
dir3/ABC/
dir3/ABC/file
Run Code Online (Sandbox Code Playgroud)