我有 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