cut
/find
の出力をscp
にリダイレクトし、その間にファイル名変換を適用する必要があります。
背景:
バージョン管理にクリアケースを使用しています。 _/Main
_から分岐したブランチfeature
があります。 scp
ブランチからのすべてのファイルと_/Main
_にある元のバージョンを他のマシンにfeature
したいと思います。
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
という1つのファイルが作成されます。したがって、a.c@@/Main
の場合、ターゲットはa.c
のままであると想定しました。
これで、filefinder
を使用する代わりに、1回の操作でファイルをコピーできます。 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
これは、ファイル名が1行に1つであり、改行などの厄介な文字がないことを前提としています。