以下は期待どおりに機能します。
rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pineapple /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/
しかし、単純化すると、次のようになります。
rsync --delete-after -uavh --progress \
/home/usr/test1/cool-beans /home/usr/test2/ \
/home/usr/test1/pineapple /home/usr/test2/ \
/home/usr/test1/pizza /home/usr/test2/ \
/home/usr/test1/dragons /home/usr/test2/elephant/
エラーが発生します。必要に応じて、「dragons」フォルダを「elephant」に入れる代わりに、「cool-beans」、「pineapple」、「pizza」、および「dragons」をすべて「elephant」に入れることは望ましくありません。同じ出力を得ながら、どのように単純化された方法で(最初の例を重複せずに)作成できますか?ありがとうございます!
答え1
rsync
単一のコマンドに複数のターゲットを含めることはできません。 「単純化された」バージョンを試すと、最後のパスを除くすべてのパスがコピーされたデータのソースと見なされるため、それ自体cool-beans
からpineapple
コピー(複製)するわけではありません。このオプションは、初めて何かを試すときに非常に便利です。pizza
dragons
test2
--dry-run
通話を2回に減らすことができます。次のいずれかを完了してください。
rsync --delete-after -uavh --progress /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
rsync --delete-after -uavh --progress /home/usr/test1/dragons /home/usr/test2/elephant/
または、関数を使用して共通要素をカプセル化します。
myRsync1() {
rsync --delete-after -uavh --progress "$@"
}
myRsync1 /home/usr/test1/cool-beans /home/usr/test1/pineapple /home/usr/test1/pizza /home/usr/test2/
myRsync1 /home/usr/test1/dragons /home/usr/test2/elephant/
ほとんどのパスが固定コンポーネントで始まることを保証できる場合は、パブリックパス(すでに存在する必要があります)を最初の引数として提供して、関数呼び出しの視覚的な使用をさらに簡素化できます。
myRsync2() (
cd -- "$1" || return 1
shift
rsync --delete-after -uavh --progress "$@"
)
それから電話してください。
myRsync2 /home/usr/test1 cool-beans pineapple pizza /home/usr/test2/
myRsync2 /home/usr/test1/dragons /home/usr/test2/elephant
または:
myRsync2 /home/usr test1/cool-beans test1/pineapple test1/pizza test2/
myRsync2 /home/usr test1/dragons test2/elephant
答え2
あなたはできません。rsync
複数のソースを許可できますが、ターゲットは1つだけを許可できます。 rsyncは複数回呼び出す必要があります。
ただし、同じrsyncとオプションの部分を変数に入れて呼び出すことはできます。
rsync_call="rsync --delete-after -uvah --progress"
$rsync_call /source/one/ /destination/one/
$rsync_call /source/two/ /destination/two/