Rsync: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 27: Regel 27:
 
Ik geloof dat rsync standaard de ''verzonden'' file kiest als autoriteit, als er verschillen zijn in grootte en datum-van-laatste-verandering. Met de flag <code>--checksum</code> kun je niet nauwkeuriger doen [https://en.wikipedia.org/wiki/Rsync]
 
Ik geloof dat rsync standaard de ''verzonden'' file kiest als autoriteit, als er verschillen zijn in grootte en datum-van-laatste-verandering. Met de flag <code>--checksum</code> kun je niet nauwkeuriger doen [https://en.wikipedia.org/wiki/Rsync]
  
== Mappen & bestanden - Hoe zit het precies? ==
+
== Mappen, bestanden & argumenten - Hoe zit het precies? ==
  
 
Ik vind het vaak lastig om de argumenten goed te krijgen, als het gaat om het kopiëren van mappen met inhoud. Komt-ie:
 
Ik vind het vaak lastig om de argumenten goed te krijgen, als het gaat om het kopiëren van mappen met inhoud. Komt-ie:

Versie van 16 jul 2020 07:03

rsync gaat door waar cp en scp ophouden. Op de man page wordt het omschreven als a fast, versatile, remote (and local) file-copying tool. Het is oa. geschikt voor efficiënte datatransfer over een SSH-verbinding. Maar ook binnen één en dezelfde computer kan het soms wonderen doen. Daarnaast lijkt het een volwaardig backupt-tool te zijn. Overigens: rsync is niet immuum voor het argument too long-probleem dat hier geschetst wordt, maar het heeft er wel oplossingen voor.

Kopiëren, niet verplaatsen

rsync is bedoeld om te kopiëren. Je kunt er ook mee verplaatsen (met de switch --remove-source-files), maar dat gaat vermoedelijk niet sneller dan met mv. Behalve dat mv niet over netwerkprotocolen kan werken.

Upload over SSH

rsync werkt prima over SSH, net als scp. Vermoedelijk is rsync betrouwbaarder en efficiënter [1] dus ik gebruik dat liever. Voorbeeld:

rsync -av * dvb87:/var/www/example.com/

Rename

rsync kan gewoon hernoemen zoals cp dat ook kan. Bv.:

rsync ./test-01.txt ./test-02.txt

Synchronisatie ipv. kopiëren

Stel je wilt 15.000 bestanden kopiëren van map A naar map B, maar een deel is al gedaan. Met cp is dit alles of niets. Met rsync wordt de map gesynchroniseerd: Er wordt alleen gekopiëerd wat nodig is. Uiteraard kost synchroniseren ook tijd (ihb.: verifiëren dat de bestanden gelijk zijn), maar vermoedelijk is het efficiënter dan cp.

Synchronisation & arbitrage

Ik geloof dat rsync standaard de verzonden file kiest als autoriteit, als er verschillen zijn in grootte en datum-van-laatste-verandering. Met de flag --checksum kun je niet nauwkeuriger doen [2]

Mappen, bestanden & argumenten - Hoe zit het precies?

Ik vind het vaak lastig om de argumenten goed te krijgen, als het gaat om het kopiëren van mappen met inhoud. Komt-ie:

  • in-map bevat één (leeg) bestand
  • uit-map bevat niets.

Kopiëer een map (met inhoud) naar een andere map

#!/bin/bash
#
inmap="/tmp/in-map"
uitmap="/tmp/uit-map"

bron=$inmap
doel=$uitmap

echo "Bron: "$bron
echo "Doel: "$doel

rsync -vva $bron $doel

Nu krijg je in de map uit-map een map in-map met daarin het bestand - Meestal niet wat ik zoek.

Kopiëer de inhoud van een map naar een andere map

Dit is wat ik hierboven eigenlijk zocht:

#!/bin/bash
#
inmap="/tmp/in-map"
uitmap="/tmp/uit-map"

bron=$inmap"/*"
doel=$uitmap

echo "Bron: "$bron
echo "Doel: "$doel

rsync -vva $bron $doel
  • Ik vond het hier handig om met aparte variabelen bron en doel te werken: Dat helpt met debuggen. Als ik suffixen toepas als argumenten voor rsync, mis ik dat
  • Merk op, dat er geen / nodig is aan het eind van bron en doel. Vermoedelijk heb je dat nooit nodig.

Kopiëer meerdere mappen (met wildcard) naar een andere map

Zo dus:

#!/bin/bash
#
# Hoe kopiëer ik alle mapen die beginnen met "in" naar de doellocatie?

inmap="/tmp/in*"
uitmap="/tmp/uit-map"

bron=$inmap
doel=$uitmap

echo "Bron: "$bron
echo "Doel: "$doel

rsync -vva $bron $doel

Zie ook

Bronnen