bash 腳本將“cut”/“find”的輸出重定向到“scp”,並應用了一些轉換
我需要將
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}'
謝謝!
在沒有具體定義的情況下,
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
這假定您的文件名是每行一個,沒有像換行這樣的尷尬字元。