你如何在命令工具上发出一系列命令?

San*_*fer 2 scripting rsync

我之前有一个问题(已删除),但我仍然不明白为什么很难理解我要问的问题,但我会再试一次,而且会更清楚。

因此,我将多个文件夹从服务器 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
Run Code Online (Sandbox Code Playgroud)

出于可读性的目的,我在这里用中断将它们分开。通常是一整行

这通常带有;分号字符

Seb*_*ian 12

为了可重复性,我建议将这些行放入一个小脚本中,但不要使用关键字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
Run Code Online (Sandbox Code Playgroud)

要运行这一系列命令,请键入:

chmod +x myscript.sh
sudo ./myscript.sh
Run Code Online (Sandbox Code Playgroud)

这样,sudo在长命令期间不会超时。脚本文件中不需要分号。默认情况下,每一行都可能失败并执行下一行(要更改这一点,请使用set -o errexit)。

我还注意到你的命令中有一些可疑的东西。对于--progress您没有使用常规连字符的选项,而是使用其他一些类似的字符。这可能是您所看到的错误的另一个来源。


msw*_*msw 8

请注意 rsync 的用法是rsync [OPTION]... SRC [SRC]... DEST这意味着这可以更简单地写为

 rsync -r -t -h /src1dir /src2 /src3 /destdir
Run Code Online (Sandbox Code Playgroud)

这不受 sudo 会话超时的影响。您没有问,但该选项-a-r -t.