명령 도구에서 일련의 명령을 실행하는 방법은 무엇입니까?

명령 도구에서 일련의 명령을 실행하는 방법은 무엇입니까?

이전에 질문이 있었는데(삭제됨) 질문하려는 내용을 이해하는 것이 왜 그렇게 어려운지 아직도 이해가 안 되지만, 다시 시도해서 더 명확하게 설명하겠습니다.

따라서 서버 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부르다. 이를 수행하는 몇 가지 방법은 다음과 같습니다.

  1. 명령을 스크립트에 작성하고 sudo@Sebastian이 언급한 대로 스크립트를 실행합니다.답변.

  2. rsync여러 소스 폴더가 있는 경우 명령 실행제안@msw로.

  3. 동적 빌드 명령. 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
    
  4. 를 사용하여 루트 셸을 시작합니다 sudo -i. 그러면 슈퍼유저로 로그인되어 마음대로 명령을 실행할 수 있습니다.

    $ sudo -i
    Password:
    # rsync -avh /from/dir1 /to/dir
    # rsync -avh /from/dir2 /to/dir
    # rsync -avh /from/dir3 /to/dir
    

관련 정보