3

基本上我的问题是如何使用 bash shell 命令自动执行以下操作,这样我就可以轻松跟踪修改后的文件。

  1. 列出 svn 签出文件
  2. 在名为“change”的目录中创建指向上述文件的链接文件

laptop$ svn status -q

M            rcms/src/config/ta_show.c
M            rcms/src/config/ta_config.c

laptop$ cd  change
laptop$ link -s ../rcms/src/config/ta_show.c ta_show.c
laptop$ link -s ../rcms/src/config/ta_config.c ta_config.c

laptop$ ls
lrwxrwxrwx 1 root root 59 Nov 27 12:24 ta_show.c -> ../rcms/src/config/ta_show.c
lrwxrwxrwx 1 root root 59 Nov 27 12:24 ta_config.c -> ../rcms/src/config/ta_config.c

我正在考虑使用如下 shell 命令:

$ svn status -q | sed 's/M       //' | xargs -I xxx ln -s ***BETWEEN REAL FILE AND BASE FILENAME***
4

1 回答 1

3

你有两件事需要关注:

  • 每个文件之间的空行,svn status 'M'
  • 提取文件名

awk 一个班轮可以做到:

awk '$0{x=$2;gsub(".*/","",x);print "ln -s ../"$2" "x}'

因此,如果您将svn status输出通过管道传输到上面的行,它会为您打印ln -s命令行。

如果您希望执行 ln -s 行,您可以将输出通过管道传输到 sh ( svn status|awk ...|sh) 或替换printsystem

最后,我想以下面的输出为例:

kent$ echo "M            rcms/src/config/ta_show.c

M            rcms/src/config/ta_config.c"|awk '$0{x=$2;gsub(".*/","",x);print "ln -s .."$2" "x}'
ln -s ../rcms/src/config/ta_show.c ta_show.c
ln -s ../rcms/src/config/ta_config.c ta_config.c
于 2012-11-29T22:07:08.340 回答