1

SCP によってあるサーバーから別のサーバーにコピーされたファイルのリストを取得しようとしていますが、コマンドがreadループ内で正しくビルドされていないようです。

diff_tapes.txt次のように、コピーするファイルのリストを含むファイルがあります。

/VAULT14/TEST_V14/634001
/VAULT14/TEST_V14/634002
/VAULT14/TEST_V14/634003
/VAULT14/TEST_V14/634004

などなど...

私が使用しているbashコマンドラインは次のとおりです。

while read line; do scp -p bill@lgrdcpvtsa:$line $line;done < /home/bill/diff_tapes.txt

コマンドラインからそれを実行すると(私はCentOSで実行しているので、基本的にはRed Hatです)、次のようになります:

/VAULT14/TEST_V14/634001: No such file or directory

...すべてのファイルに対して。

-v詳細情報を取得するためにスイッチを追加して再度実行すると、次のように表示されます。

debug1: Sending command: scp -v -p -f /VAULT14/TEST_V14/634001

リモート サーバー (lgrdcpvtsa) には、問題のファイルが間違いなく含まれています。

[bill@LGRDCPVTSA TEST_V14]$ pwd
/VAULT14/TEST_V14
[bill@LGRDCPVTSA TEST_V14]$ ls -ll
total 207200
-rw------- 1 bill bill 27263700 Apr 26 11:16 634001
-rw------- 1 bill bill 27263700 Apr 26 11:16 634002
-rw------- 1 bill bill 27263700 Apr 26 11:16 634003
-rw------- 1 bill bill 27263700 Apr 26 11:16 634004

$linescp コマンドを 2 回目に使用したかのように、無視されます。

構文の何が問題なのか分かりますか?

編集:

わかりやすくするために、ファイルのリストは次のようになります。

/VAULT14/634100_V14/634001
/VAULT11/601100_V11/601011
/VAULT12/510200_V12/510192

/VAULT10両方のサーバーに存在するため、/VAULT14次のフォルダー ノードが存在しない可能性があります。

これらのファイルは、ローカル マシンとリモート マシンで異なるというフラグが付けられたファイルであるため、正しいデータ ソースであるリモート マシンからコピーするため、ここでは再帰的なコピーは機能しません (-rスイッチは以前のテストからのハングオーバーだったと思うので、上記のコードからそれを削除しました)。

4

2 に答える 2

1

/VAULT14/TEST_V14/634001: そのようなファイルまたはディレクトリはありません

これは、フォルダー /VAULT14/TEST_V14/がローカル コンピューターに存在しないことが原因である可能性があります。

結果:

mkdir /VAULT14/TEST14
while read line; do 
    scp -p bill@lgrdcpvtsa:"$line" "$line"
done < /home/bill/diff_tapes.txt
于 2013-07-12T15:48:52.270 に答える
1

ローカル ディレクトリ/VAULT14/TEST_V14/が存在しないため、エラーが発生した可能性があります。

このコマンドを使用してdirname、パスからディレクトリ名を取得し、ディレクトリを作成してからscpコマンドを実行できます。例

while read line; do mkdir -p "$(dirname "$line")"; scp -rp bill@lgrdcpvtsa:"$line" "$line";done < /home/bill/diff_tapes.txt

この-pオプションはmkdir、親が存在しない場合でもサブディレクトリを作成するように指示します。

編集: これはすべてのファイルをコピーしていた/ので、完全に機能する次のように変更されました:

while read line; do mkdir -p "$(dirname "$line")"; scp -p bill@lgrdcpvtsa:"$line" "$line";done < /home/bill/diff_tapes.txt
于 2013-07-12T16:10:00.853 に答える