/のcut
出力をリダイレクトし、その間にファイル名変換を適用する必要があります。find
scp
背景:
バージョン管理には透明ケースを使用しています。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
/ commandの出力を編集する前に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
これでファイルを使用するのではなく、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つずつあると仮定します。