【发布时间】:2015-12-16 13:21:25
【问题描述】:
我在一个目录树下存档了很多项目,其中一些项目中有一个 .git 文件夹。
我想做的是递归地将这些文件和目录复制到一个新的目的地,保持当前的结构——除了那些包含 .git 文件夹的目录,在这种情况下脚本应该运行一个命令(比如说“ echo",我稍后会更改它)后跟文件夹名称,而不创建或复制它。
任何帮助将不胜感激。
编辑:我会尝试更好地解释我自己:我需要复制每个文件和目录,除了那些包含 .git 的文件和目录,应该跳过它们并将它们的路径传递给另一个命令。在此示例中,路径 a/b/c/d 及其子文件夹应完全跳过,并应使用 echo 显示 a/b/c/d(为简洁起见,稍后我将用不同的命令替换它):
a
a/b
a/b/c
a/b/c/d/.git
a/b/c/d/e
a/b/c/d/f/g
a/b/c/e
a/b/d
a/c
b
b/c
...
【问题讨论】:
-
完成后是否可以选择复制所有内容并使用 find 删除 .git 文件夹?
-
看看
rsync及其exclude选项。 -
当你有一个包含
a/.git、a/b/some.txt`和a/c/.git的目录树时,你想跳过a/b文件夹吗? -
@WalterA 是的,没关系,只要为每个包含 .git 的文件夹运行命令(echo)(基本上我需要稍后使用不同的 git 命令重新创建它们) .是的,只要里面有 .git,一切都可以跳过。
-
我删除了以
ls -d */开头的答案。 @gniourf_gniourf 评论正确:不要解析 ls 的输出,尤其是 ls -d */ 太可怕了!我用带空格的目录进行了测试,但是当目录包含换行符时它会变得很疯狂。