rsync 버전 3.0.9를 사용하여 여러 파일을 복사할 수 없습니까?

rsync 버전 3.0.9를 사용하여 여러 파일을 복사할 수 없습니까?

rsync를 사용하여 두 파일을 복사하려고 하는데 machineB어떻게든 항상 파일 하나만 복사하고 두 번째 파일은 복사하지 않습니다.

이것은 내가 사용하는 구문입니다.

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하고 /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/

예제의 처음 두 파일을 사용자와 동일한 구문을 사용하여 복사하지만 이는 별도의 매개변수입니다(참조하면 하나의 매개변수로 연결됩니다). 경로에 인용이 필요한 문자가 포함된 경우 다음을 수행할 수 있습니다.

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/"

참조에 관계없이 [@]배열은 다른 매개변수로 분할됩니다. 그렇지 않으면 변수 참조에 주의하십시오. 일부 변수는 문제를 일으킬 수도 있고 그렇지 않을 수도 있습니다.

관련 정보