rsyncを使用して2つのファイルをコピーしようとしていますが、何らかの方法でmachineB
常に1つのファイルのみをコピーし、2番目のファイルをコピーしません。
これは私が使用する構文です。
rsync -avz david@machineB:'/data/pe_t1_snapshot/20140317/t1_weekly_1680_0_200003_5.data :/data/pe_t1_snapshot/20140317/t1_weekly_1680_1_200003_5.data' /data01/primary
このファイルだけがフォルダにコピーされ、t1_weekly_1680_0_200003_5.data
2/data01/primary
番目のファイルはコピーされませんt1_weekly_1680_1_200003_5.data
。
Ubuntu 12.04を使用しており、rsyncのバージョンは-
rsync version 3.0.9 protocol version 30
これは私が受け取るエラーです -
receiving incremental file list
rsync: change_dir "/home/david/:/data/pe_t1_snapshot/20140317" failed: No such file or directory (2)
t1_weekly_1680_0_200003_5.data
sent 30 bytes received 504982813 bytes 6196108.50 bytes/sec
total size is 1761988281 speedup is 3.49
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1536) [generator=3.0.9]
rsyncのマニュアルを読み始めましたが、どういうわけか私が間違っていることを理解できませんか?
直す:-
コンソールで実行すると、単一のコマンドで正しく実行されますが、シェルスクリプトで実行する必要があるため、シェルスクリプトに提案を追加しました。
次の例では、提案を実行しましたが、エラーが発生しました。
以下はシェルスクリプトです。からファイルをコピーしようとしますmachineB
。ファイルが存在しない場合は、ファイルがmachineB
存在する必要があるため、machineC
からコピーしようとしますmachineC
。ファイル番号がありますPRIMARY_PARTITION
。SECONDARY_PARTITION
以下は私が実行しているシェルスクリプトですmachineA
。
#!/usr/bin/env bash
readonly PRIMARY=/data01/primary
readonly FILERS_LOCATION=(machineB machineC)
readonly MEMORY_MAPPED_LOCATION=/bexbat/data/be_t1_snapshot
PRIMARY_PARTITION=(0 548)
SECONDARY_PARTITION=(1101 1374)
dir1=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[0]} \
ls -dt1 "$MEMORY_MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] |
head -n1)
dir2=$(ssh -o "StrictHostKeyChecking no" david@${FILERS_LOCATION[1]} \
ls -dt1 "$MEMORY_MAPPED_LOCATION"/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] |
head -n1)
echo $dir1
echo $dir2
## Build your list of filenames before the loop.
for n in "${PRIMARY_PARTITION[@]}"
do
primary_files="$primary_files :$dir1"/t1_weekly_1680_"$n"_200003_5.data
done
## Repeat for $SECONDARY_PARTITION
for n in "${SECONDARY_PARTITION[@]}"
do
secondary_files="$secondary_files :$dir2"/t1_weekly_1680_"$n"_200003_5.data
done
echo "Primary: " $primary_files
echo "Secondary: " $secondary_files
if [ "$dir1" = "$dir2" ]
then
find "$PRIMARY" -mindepth 1 -delete
# this line is giving an exception somehow
rsync -avz david@${FILERS_LOCATION[0]}${primary_files} $PRIMARY/
rsync -avz david@${FILERS_LOCATION[1]}${primary_files} $PRIMARY/
fi
以下は私が受け取るエラーです -
Unexpected remote arg: :/data/pe_t1_snapshot/20140320/t1_weekly_1680_0_200003_5.data
rsync error: syntax or usage error (code 1) at main.c(1232) [sender=3.0.9]
Unexpected remote arg: :/data/pe_t1_snapshot/20140320/t1_weekly_1680_0_200003_5.data
rsync error: syntax or usage error (code 1) at main.c(1232) [sender=3.0.9]
Unexpected remote arg: :/data/pe_t1_snapshot/20140320/t1_weekly_1680_1101_200003_5.data
rsync error: syntax or usage error (code 1) at main.c(1232) [sender=3.0.9]
Unexpected remote arg: :/data/pe_t1_snapshot/20140320/t1_weekly_1680_1101_200003_5.data
rsync error: syntax or usage error (code 1) at main.c(1232) [sender=3.0.9]
ベストアンサー1
表面的には引用符を削除するだけです(明確にするために新しい行が追加されます)。
rsync -avz \
david@machineB:/data/pe_t1_snapshot/20140317/t1_weekly_1680_0_200003_5.data \
:/data/pe_t1_snapshot/20140317/t1_weekly_1680_1_200003_5.data \
/data01/primary
rsync
マニュアルページから:
The syntax for requesting multiple files from a remote host is done by
specifying additional remote-host args in the same style as the first, or with
the hostname omitted. For instance, all these work:
rsync -av host:file1 :file2 host:file{3,4} /dest/
例の最初の2つのファイルはユーザーと同じ構文を使用してコピーされますが、これは別々のパラメータです(参照すると1つのパラメータにリンクされます)。パスに引用符が必要な文字が含まれている場合は、次のことができます。
rsync -avz \
'user@host:dodgy path/file_with_asterix*' \
':some_other/dodgy\\path' \
/dest
修正する
スクリプトを操作する最も簡単な方法は、primary_files
に配列を使用することですsecondary_files
。関連する変更は次のとおりですprimary_files
。
for n in "${PRIMARY_PARTITION[@]}"
do
primary_files+=( ":$dir1/t1_weekly_1680_${n}_200003_5.data" )
done
....
echo "Primary: ${primary_files[@]}"
...
rsync -avz "david@${FILERS_LOCATION[0]}${primary_files[@]}" "$PRIMARY/"
参照に関係なく、配列[@]
は他のパラメータに分割されます。それ以外の場合は、変数参照に注意してください。一部の変数は問題を引き起こす可能性があります。