我想将文件夹从一个目录复制(覆盖)到另一组目录,前提是目录 1 中的文件夹存在于目录 2 中。
例如,我在我的主目录中存储了一些文件夹:
home
|admin
|updates
|package1
|package2
|package3
我还有另一个包含应用程序构建的文件夹:
home
|builds
|build1
|packages
|package1
|package2
|package3
|build2
|packages
|package1
|package3
|build3
|rev1
|packages
|package1
|rev2
|packages
|package2
我希望将“/home/updates/package”目录中找到的“package1”、“package2”、“package3”文件夹复制到“/home/builds”目录中递归找到的“packages”文件夹,但前提是这些文件夹已经存在。
因此,在上面的示例中,“package1”/“package2”/“package3”将被复制到“/home/builds/build1/packages”中。只有“package1”会被复制到“/home/builds/build3/rev1/packages”中(“package2”/“package3”不会被复制,因为它在那里不存在)。
此外,“build1”/“build2”/“build3”可能具有不同的所有者/组权限,因此我想保留相对目标目录的权限。
答案1
mkdir -p test/updates/pack1
...
mkdir -p test/builds/builds1/packages/pack3
...
touch test/updates/pack1/f1-1
...
运行这个命令
find test/builds -type d -name packages -exec bash -c 'for pk in "$1"/pack* ; do cp -r test/updates/"${pk##*/}" $1 ; done' none {} \;
- ‘寻找’意志递归搜索对于“包”目录。
- '-exec bash -c' 将运行批处理“find”的结果。
- bash 'for' 循环将在目标中搜索现有的“packX”并从源复制它们(使用参数。扩展)到目的地。
问候
答案2
for i in package1 package2 package3; do find /home/ -name $i -type d -not -path "/home/admin/updates/$i" -exec cp /home/admin/updates/$i/* {} \;; done
for i in package1 package2 package3; ... ; done
- 遍历文件夹的名称find /home/ -name $i -type d
- 递归查找 /home/ 目录中具有上述名称的所有文件夹-not -path "/home/admin/updates/$i"
- 从查找结果中排除原始目录-exec cp /home/admin/updates/$i/* {} \;
- 执行命令 - 将文件从原始文件夹复制到找到的文件夹