gpt4 book ai didi

Linux:递归复制 ".svn"目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:18 25 4
gpt4 key购买 nike

我知道有许多关于类似 topcis 的问题,但我仍然无法解决这个问题。

我需要将所有 .svn 目录从 /var/foo 递归复制到 Debian 机器上的 /var/foo2:

/var/www/foo/.svn
/var/www/foo/bar/.svn
...

我试过这两个命令都没有成功:

find /var/foo -name ".svn" -type f -exec cp {} ./var/foo2 \;
find /var/foo -name ".svn" -type d -exec cp {} /var/foo2 \;

有一次只有 foo 中的 svn 目录被复制,而另一次没有被复制。

最佳答案

给定以下文件结构:

./
./a/
./a/test/
./a/test/2
./b/
./b/3
./test/
./test/1

在要复制的目录中运行以下脚本:

find -type d -iname test -exec sh -c 'mkdir -p "$(dirname ~/tmp2/{})"; cp -r {}/ ~/tmp2/{}' \;

应将所有测试目录复制到 ~/tmp2/

兴趣点:

  • 目录被一个接一个地复制到目的地
  • 父目录是预先创建的,这样 cp 就不会提示目标不存在
  • 不只是cp,还使用了cp -r
  • 整个命令用 sh -c 包裹起来,这样就可以对 {} 进行操作,例如 dirname (这样 shell 会分别为每个目录展开它,而不是在调用 find)
  • 时展开一次

~/tmp2 中的结果结构:

./
./a/
./a/test/
./a/test/2
./test/
./test/1

因此,您需要做的就是将 test 替换为 .svn 并将 ~/tmp2 替换为所选目录。 请记住在源目录中运行它,而不是使用绝对路径。

关于Linux:递归复制 ".svn"目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com