Shell 管道外壳输出到svn del命令?

Shell 管道外壳输出到svn del命令?,shell,svn,Shell,Svn,我有一个相当复杂的Drupal站点部署设置,它是CVS和SVN的组合。我们使用CVS获取最新版本的模块,并使用SVN进行部署。不幸的是,当CVS更新删除文件时,Subversions会抱怨,因为它们没有在SVN中删除。我正在尝试执行一些shell脚本和Perl,以便对所有这些已经从文件系统中删除的文件运行svn rm命令,但我还没有走多远。到目前为止,我得到的是: svn st | grep ! 这将输出从文件系统中删除的所有文件的列表,如下所示: ! panels_views/p

我有一个相当复杂的Drupal站点部署设置,它是CVS和SVN的组合。我们使用CVS获取最新版本的模块,并使用SVN进行部署。不幸的是,当CVS更新删除文件时,Subversions会抱怨,因为它们没有在SVN中删除。我正在尝试执行一些shell脚本和Perl,以便对所有这些已经从文件系统中删除的文件运行
svn rm
命令,但我还没有走多远。到目前为止,我得到的是:

svn st | grep !
这将输出从文件系统中删除的所有文件的列表,如下所示:

!       panels_views/panels_views.info
!       panels_views/panels_views.admin.inc
!       contexts/term.inc
!       contexts/vocabulary.inc
!       contexts/terms.inc
!       contexts/node_edit_form.inc
!       contexts/user.inc
!       contexts/node_add_form.inc
!       contexts/node.inc
etc. . .
但是,我想在每一行上运行一个
svndel
。如何将此输出输入到Perl脚本中,或者,如何在每一行上运行
svn del

编辑:在大家的帮助下,我使用的确切命令是

svn st | grep ^! | cut -c 9- | xargs svn del

尝试使用
xargs
,如下所示:

svn st | grep ^! | cut -f2 | xargs svn rm
xargs
命令在其标准输入上获取行,并将它们转过来,并将这些行用作
svn rm
上的命令行参数。默认情况下,
xargs
在每次调用其命令时使用多行,这在
svm rm
的情况下是可以的

您可能还必须尝试使用
cut
命令才能使其正确。默认情况下,
cut
使用制表符作为分隔符,Subversion可能会在其中输出空格。在这种情况下,您可能必须使用
cut-d'-f6
或其他方法


和往常一样,在构建这样的命令管道时,一次运行一部分以确保事情看起来是正确的。因此,在最后使用
“| xargs svn rm”
再次运行之前,请运行
cut
命令之前的所有操作,以确保您拥有所需的文件名列表。

作为上述操作的替代方法,我会使用以下内容:

svn st | egrep ^! | cut -b 9- | xargs svn del
svn st | awk '$1=="!"{print $2}' | xargs svn del

我发现awk的模式匹配语言对于这样的任务非常方便。

我会改变
grep
grep^以确保我们不会意外杀死路径中碰巧有感叹号的文件。太好了,我不知道剪切或xargs。我知道Perl不是最简单的方法,但我对它有点熟悉。