我有 100 个文件夹,每个文件夹都有一个名为“ABC”的子文件夹。我想将“ABC”的文件夹结构和内容复制到另一个位置。
我怎样才能通过 Ubuntu 终端做到这一点?
我会使用类似这样的 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)