이전에 질문이 있었는데(삭제됨) 질문하려는 내용을 이해하는 것이 왜 그렇게 어려운지 아직도 이해가 안 되지만, 다시 시도해서 더 명확하게 설명하겠습니다.
따라서 서버 A에서 서버 B로 여러 폴더를 복사하지만 각 복사 프로세스에 대한 명령("rsync")은 각 폴더에 대해 한 번씩 명령줄에서 실행되어야 합니다.
따라서 폴더 A를 서버 X에 복사하기 위해 rsync 명령을 실행하고, 복사가 완료된 후 새 rsync 명령을 실행하여 폴더 B를 서버 X에 복사합니다.
제가 조사를 좀 해보니 제 필요 사항에 대해 도움을 드릴 수 있을 것 같습니다. 하지만 동시에 여러 명령을 작성하는 방법을 찾고 있습니다. 이 방법은 이전 명령이 작업을 완료하고 복사가 완료되면 차례로 실행됩니다.
;
일반적으로 여러 명령은 세미콜론이나 앰퍼샌드로 한 줄에서 구분됩니다 &&
. 차이점은 첫 번째/이전 명령이 세미콜론으로 인해 실패한 경우에도 계속 진행된다는 것입니다. 명령에서 오류가 발생하고 앰퍼샌드를 사용하면 명령이 중지됩니다.
그래서 그 과정에서 세미콜론을 사용하고 컴퓨터를 밤새도록 실행시켰는데... 세미콜론으로 구분하여 한 줄에 여러 명령을 썼음에도 불구하고 첫 번째 명령만 실행되었습니다. 따라서 이 모든 명령을 하나씩 실행해야 합니다... 먼저: 여러 명령을 올바르게 실행하려면 어떻게 해야 합니까? B, 내 명령에 무슨 문제가 있습니까?
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-02-233653/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-09-152837/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-20-201229/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-02-21-130931/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-03-05-113353/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-03-19-162703/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-05-13-215016/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-06-01-231321/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
가독성을 위해 여기서는 구분 기호를 사용하여 구분했습니다. 일반적으로 전체 라인
일반적으로 ;
세미콜론 문자로 끝납니다.
답변1
재현성을 위해 키워드 없이 다음 줄을 작은 스크립트에 넣는 것이 좋습니다 sudo
.
#!/bin/bash
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-02-233653/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-09-152837/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-20-201229/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-02-21-130931/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-03-05-113353/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-03-19-162703/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-05-13-215016/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
rsync -v -v -r -h -t --progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-06-01-231321/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
이 일련의 명령을 실행하려면 다음을 입력하십시오.
chmod +x myscript.sh
sudo ./myscript.sh
이렇게 하면 sudo
긴 명령 중에 시간 초과가 발생하지 않습니다. 스크립트 파일에는 세미콜론이 필요하지 않습니다. 기본적으로 각 줄은 실패할 수 있으며 다음 줄이 실행됩니다(이를 변경하려면 를 사용하세요 set -o errexit
).
나는 또한 당신의 명령에서 수상한 것을 발견했습니다. --progress
일반 옵션을 사용하지 않는 경우하이픈, 하지만 비슷한 모양의 캐릭터가 몇 가지 더 있습니다. 이는 현재 보고 있는 오류의 또 다른 원인일 수 있습니다.
답변2
rsync를 사용하면 rsync [OPTION]... SRC [SRC]... DEST
다음과 같이 더 간단하게 작성할 수 있습니다.
rsync -r -t -h /src1dir /src2 /src3 /destdir
sudo 세션 시간 초과의 영향을 받지 않습니다. 묻지 않았지만 옵션 -a
이 -r -t
.
답변3
이를 수행하는 방법에는 여러 가지가 있습니다. 시도 중인 방법은 각 방법 sudo
에 비밀번호 입력이 필요하지 않으면 완벽하게 작동할 것입니다. 이 경우 두 번째 명령이 암호를 요구하는데 암호를 제공하지 않기 때문에 명령이 중단됩니다. 따라서 모든 것을 실행할 수 있는 방법이 필요합니다.하나의 sudo
부르다. 이를 수행하는 몇 가지 방법은 다음과 같습니다.
명령을 스크립트에 작성하고
sudo
@Sebastian이 언급한 대로 스크립트를 실행합니다.답변.rsync
여러 소스 폴더가 있는 경우 명령 실행제안@msw로.동적 빌드 명령.
SSDaeffer
모든 폴더를 에 복사 하려는 것 같습니다/Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
. 이는 간단히 쓸 수 있다는 의미입니다.sudo rsync -vah /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/*/SSDaeffer \ /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
그러면
SSDaeffer
디렉토리의 모든 폴더 하위 폴더가/Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS
에 복사됩니다/Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap
.모두거기 폴더SSDaeffer
. 그 중 일부만 필요한 경우 파일에 나열할 수 있습니다.$ cat file 2014-01-02-233653 2014-01-09-152837 2014-01-20-201229 2014-02-21-130931
그런 다음 파일을 읽어 원하는 이름을 얻으십시오.
sudo while read dir; do rsync -vah /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/$dir/SSDaeffer \ /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap; done < file
폴더 이름에 공백이나 기타 이상한 문자가 포함될 수 있는 경우 다음을 대신 사용하세요.
while IFS= read -r dir; do rsync -vah /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/$dir/SSDaeffer \ /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap; done < file
를 사용하여 루트 셸을 시작합니다
sudo -i
. 그러면 슈퍼유저로 로그인되어 마음대로 명령을 실행할 수 있습니다.$ sudo -i Password: # rsync -avh /from/dir1 /to/dir # rsync -avh /from/dir2 /to/dir # rsync -avh /from/dir3 /to/dir