通过Bash复制/扩散未版本的SVN文件

通过Bash复制/扩散未版本的SVN文件,svn,bash,Svn,Bash,首先,我对bash用法和语法的了解非常有限。到目前为止,我所做的一切都被“黑”在一起,所以如果你看到一些愚蠢的事情,请让我知道: 我正在尝试编写一个夜间“备份”脚本,将svn diff的结果放入一个单独的文件夹中。我的问题是,该命令忽略未版本化的文件。我希望差异包括这些文件或整个文件本身 旁白:如果在资源管理器窗口中右键单击并选择Team->Create Patch,Eclipsepdt将完成此操作。这可能是Subclipse的一个特性 我已经从高到低搜索了一些方法来强制输出svn diff,但

首先,我对bash用法和语法的了解非常有限。到目前为止,我所做的一切都被“黑”在一起,所以如果你看到一些愚蠢的事情,请让我知道:

我正在尝试编写一个夜间“备份”脚本,将svn diff的结果放入一个单独的文件夹中。我的问题是,该命令忽略未版本化的文件。我希望差异包括这些文件或整个文件本身

旁白:如果在资源管理器窗口中右键单击并选择Team->Create Patch,Eclipsepdt将完成此操作。这可能是Subclipse的一个特性

我已经从高到低搜索了一些方法来强制输出svn diff,但我很确定这是不可能的

到目前为止,我的目标是以当前日期将所有未版本文件复制到我的备份文件夹中:

svn status | grep ^? | awk '{print $2}'
File1.php
File2.php
File3.php
这将输出一个文件列表,其路径与调用svn状态的位置相关。我尝试将cp管道连接到底,但在命名方面遇到了问题

TLDR:我想将所有未版本化的文件附加到svn diff>backups/project.diff的结果中,以便它包括版本化和未版本化的更改

或者,如何将所有未设置版本的文件复制到特定位置,就像我在上面的示例中尝试做的那样


版本信息:Ubuntu11.04,svn 1.6.12

如果我理解正确的话,看起来你想要的。你可以复制:

svn status | grep ^? | awk '{print $2}' | xargs -J % cp % backups/
或者使用cat执行附加操作:


小心文件名中的空格。

我相信我们在同一页上。你能解释一下xargs部分或者给我指一下方向吗?我在-J选项或手册页中的%符号上找不到任何内容。cat解决方案很接近,但是它可以用'diff'语法编写吗?@Mike B,要获得diff语法,您可以尝试对/dev/null进行diffing-您也可以使用xargs进行diffing。就xargs本身而言,我认为我链接的手册页解释得很好。通常xargs接受标准输入,并将其用作指定实用程序的命令行参数。我在那里使用-J%将这些参数放在目标目录之前。该选项意味着您下次看到百分比时,将标准输入放在那里。默认情况下,只需将其粘贴在命令行的末尾。我将尝试一个不同的语法版本,并将其编辑到我的答案中。
svn status | grep ^? | awk '{print $2}' | xargs cat >> backups/project.diff