我需要将cut
/的输出重定向find
到,scp
并在其间应用文件名转换。
背景:
我正在使用clearcase进行版本控制。我有一个分支feature
从/Main
.我想要将分支scp
中的所有文件feature
及其原始版本转移/Main
到其他计算机上。
我知道列出我在分支上更改的文件的命令feature
,我也可以获得原始副本。
这是我尝试过的:
我创建了一个别名filefinder
来列出分支中的文件。
它用于find
查找分支中的所有文件feature
。
$ filefinder `feature` | cut -d '/' -f 2 -
a.c
b.c
c.h
d.h
所以,如果我尝试例如
$ scp $(filefinder KERN_414_A64 | cut -d '/' -f 2) test@ip:/path/
我可以获取分支scp
上的所有文件feature
。
要求:
为了获取/main/latest
文件的版本。我必须将文件名修改为
a.c@@/Main
b.c@@/Main
c.h@@/Main
进而scp
那些文件。所以基本上,在将find
/命令的输出输入cut
到之前编辑它scp
如果没有任何效果,我可以将我的分支更改为/Main/latest
,但试图找到更好的方法。
任何指示都会有所帮助。
更新
filefinder
别名:
cleartool find . -type f -branch "brtype($1)" -print | awk -F"@" '{print $1}'
谢谢!
答案1
在没有具体定义的情况下,filefinder
我将假设它是这样的(但请参阅下面的更新)
filefinder() { find "$1" -type f; }
我有点担心,如果您要复制许多这样命名的文件
a.c@@/Main
b.c@@/Main
c.h@@/Main
您最终将在目标上得到一个名为Main
.因此,我假设a.c@@/Main
目标应该保持为a.c
filefinder
现在,您只需一次操作即可复制文件,而不是使用。我构建了这个解决方案,以便可以像filefinder
(上面)一样对其进行参数化:
filecopier() {
find "$1" -type f -exec bash -c '
for file in "$@"
do
file="${file#*/}"
echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
done
' _ {} +
}
当您对命令正确感到满意时,请删除echo
。scp
所以看来这filefinder
并不像我想象的那么简单。尽管如此,我们仍然可以使用类似的方法
filefinder ... |
while IFS= read -r file
do
echo scp -p "${file}@@/Main" test@ip:"/path/${file##*/}"
done
这假定您的文件名是每行一个,没有换行符之类的尴尬字符。