以前に質問がありましたが(削除済み)、質問する内容を理解するのがなぜそれほど難しいのか、まだ理解できませんが、もう一度やり直してより明確に説明します。
したがって、サーバー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
呼ぶこれを行ういくつかの方法は次のとおりです。
コマンドをスクリプトに書き込み、
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