gpt4 book ai didi

git - bash 。逐行输出到另一个程序

转载 作者:太空狗 更新时间:2023-10-29 14:29:49 24 4
gpt4 key购买 nike

我有一个简单的 GIT 脚本:cp --parents $(git diff --name-only $1 $2) $3

git diff ... - 在提交($1 和 $2)之间获取修改的文件列表。

cp --parents ... - 将它们复制到所需目录($3)。

但唯一的问题是:目录名中的空格。在这种情况下,脚本无法正常工作。显然 git diff 输出的每一行都应该用引号引起来,但是如何呢?

或者有其他解决方案吗?还找不到。

最佳答案

git diff 支持 -z 选项,该选项将以 NUL 分隔名称。然后您可以通过 xargs 对其进行管道传输。示例:

$ git diff -z --name-only HEAD^ HEAD | xargs -I% -0 cp --parents "%" /tmp/

xargs 的选项:

  • -0 使其期望输入数据以 NUL 分隔;
  • -I% 让它在每次输入时运行一次命令,并用输入替换命令行中的 %(显然是 -i% 在 Windows 上?)。 % 是随意选择的,因为它很短,你也可以使用 -IFOO/"FOO";
  • cp ... 要执行的命令。

我使用 /tmp/ 作为安全示例。

所以这应该有效运行

$ cp --parents "file1" /tmp/

等等。或者,您可以在 Bash 中逐行读取 git diff 的输出。

$ git diff --name-only HEAD^ HEAD | ( while read fn ; do cp "${fn}" /tmp/ ; done )

关于git - bash 。逐行输出到另一个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458428/

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