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

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

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

我如何通过 Ubuntu 终端来完成此操作?

答案1

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

find . -mindepth 2 -maxdepth 2 -type d -name ABC \
-exec mkdir -p ../target/{} \; \
-exec rsync -a {}/ ../target/{}/ \;

这是一个测试:

$ 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

您也可以使用单个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

相关内容