コマンドツールで一連のコマンドを実行するには?

コマンドツールで一連のコマンドを実行するには?

以前に質問がありましたが(削除済み)、質問する内容を理解するのがなぜそれほど難しいのか、まだ理解できませんが、もう一度やり直してより明確に説明します。

したがって、サーバーAからサーバーBに複数のフォルダーをコピーしますが、各コピープロセスのコマンド(「rsync」)は、各フォルダーごとに1回のコマンドラインで実行する必要があります。

したがって、フォルダAをサーバXにコピーするためにrsyncコマンドを実行し、コピーが完了したら新しいrsyncコマンドを実行してフォルダBをサーバXにコピーします。

私が調査をしてみると、私の必要性について助けることができると思います。しかし、同時に複数のコマンドを書く方法を探しています。この方法は、前のコマンドがジョブを完了し、コピーが完了すると順番に実行されます。

;通常、複数のコマンドはセミコロンまたはアンパサンドで1行に分けられます&&。違いは、最初/前のコマンドがセミコロンのために失敗した場合でも続行されることです。コマンドでエラーが発生してアンパサンドを使用すると、コマンドは停止します。

それで、その過程でセミコロンを使ってコンピュータを一晩中実行させました。したがって、これらすべてのコマンドを1つずつ実行する必要があります...まず:複数のコマンドを正しく実行するにはどうすればよいですか? 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にパスワード入力が必要ない場合は完全に機能します。この場合、2番目のコマンドはパスワードを要求するためにパスワードを提供しないため、コマンドは中断されます。したがって、すべてを実行する方法が必要です。一つ 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
    

関連情報