我写了一个 git commit 钩子并在一个名为myrepo
. 我现在想将它复制到我~/repos
文件夹中的所有存储库中。为此,我尝试了:
$ cd ~/repos/myrepo/.git/hooks
$ cp prepare-commit-msg ~/repos/*/.git/hooks
当我在每个目录上运行此cp
错误并显示以下消息时repos
:
cp: -r not specified; omitting directory <directory-name>
我 100% 确定prepare-commit-msg
不是目录。为什么cp
抱怨我没有使用-r
?
find
可能是您正在寻找的工具。您可以使用它来查找已命名hooks
并位于您的~/repos/
文件夹下的每个目录。对于find
找到的每个这样的目录,你告诉它把你的文件复制到那里。当它尝试将文件复制到自身时,这将导致
myrepo
repo 出现一条错误消息,但可以忽略该错误。可以改进此命令以处理目录或文件名中奇数字符的情况,但这就是它的要点。
至于为什么您的原始
cp
命令不起作用,可能有一个问题可以更好地解释它,但这是因为 shell 将您的命令扩展为:并给出该语法,
cp
认为您希望它复制文件prepare-commit-msg
和四个目录~/repos/repo_A/.git/hooks
,~/repos/repo_D/.git/hooks
并将所有复制的文件/目录放在~/repos/repo_E/.git/hooks
. 当然,这不是您想要做的,而是cp
告诉您它不会递归地复制目录,除非您使用该-r
选项。如果您想构建您的解决方案有点像您的原始语法,您可以使用:
ls
不推荐涉及解析输出的方法。你可以
cp
用你自己的cp2dirs
:然后
cp2dirs prepare-commit-msg ~/repos/*/.git/hooks
呢