Vraag Kan scp mappen kopiëren recursief?


Momenteel kan ik alleen een exemplaar kopiëren .tar het dossier. Maar hoe kan ik mappen recursief kopiëren met scp?


518
2018-04-29 04:24


oorsprong




antwoorden:


Ja, gebruik -r:

scp -rp sourcedirectory user@dest:/path
  • -r betekent recursief
  • -p behoudt modificatietijden, toegangstijden en modi uit het originele bestand.

Opmerking: hiermee maakt u de sourcedirectory binnen /path dus de bestanden zullen erin staan /path/sourcedirectory


838
2018-04-29 04:28



Houd er echter rekening mee dat hiermee geen symlinks worden bewaard. - CpnCrunch
Let daar op -pr (opties in omgekeerde volgorde) zullen de mappen niet kopiëren, maar hun inhoud naar de doelmap (blijkbaar is de volgorde van de opties van belang). - pms
Om de een of andere reden /path lijkt relatief te zijn aan de users $HOME - hoe maak ik het absoluut zonder te zijn root@? - Jonathan
Ja, met SCP zet ik de bestanden nooit waar ik wil. Vaak als ik een map probeer te vervangen, kom ik op de een of andere manier in de buurt van een andere map met dezelfde naam erin. Ik ben hier extra voorzichtig mee. - sudo


Hoewel de vorige antwoorden technisch correct zijn, moet u ook overwegen om deze te gebruiken rsync in plaats daarvan. rsync vergelijkt de gegevens aan de zend- en ontvangzijde met een diff-mechanisme, zodat het niet opnieuw verzonden hoeft te worden.

Als u iets meer dan eens naar een externe machine gaat kopiëren, gebruikt u rsync. Eigenlijk is het goed om te gebruiken rsync elke keer omdat het meer besturingselementen heeft voor zaken als het kopiëren van bestandsrechten en eigendom en het uitsluiten van bepaalde bestanden of mappen. In het algemeen:

$ rsync -av /local/dir/ server:/remote/dir/

synchroniseert een lokale map met een externe map. Als u het een tweede keer uitvoert en de inhoud van de lokale directory niet is gewijzigd, worden er geen gegevens overgedragen - veel efficiënter dan wanneer u hardloopt scp en alles te kopiëren elke keer.

Ook, rsync stelt u in staat om gemakkelijk te herstellen van onderbroken transfers, in tegenstelling tot scp.

Eindelijk, moderne versies van rsync standaard run over ssh, dus als scp werkt al, rsync zou eigenlijk een vervanging moeten zijn.


149
2018-04-29 05:11



"geen gegevens worden overgedragen", behalve natuurlijk de gegevens die nodig zijn om precies te bepalen wat wel of niet is gewijzigd. - thsutton
Jaja, dat heb ik duidelijk een beetje verdoezeld. We hebben het hier niet over kwantumverstrengeling. - Phil Hollenback
het is zo triest dat osx, win7 en zelfs ubuntu nog niet zoiets als rsync gebruiken voor hun GUI. - cregox
dmourati Ik heb zijn vraag beantwoord. Ik heb hem een ​​betere manier verteld om het te doen. - Phil Hollenback
@raphnguyen: nee, als u bestanden uit de lokale map verwijdert, worden ze niet verwijderd uit de externe map. U kunt dit gedrag inschakelen met de --delete rsync optie. - Phil Hollenback


Dat is wat de -r optie is voor. :)

Zie de scp man pagina voor meer info indien nodig.


30
2018-04-29 04:27





Recursieve kopie-optie '-r' (kleine letters)

scp -r

Welke ik verwar met de reguliere lokale recursieve kopie optie '-R' (hoofdletter)

cp -R

9
2017-09-11 17:53



Ik wilde alleen wijzen op het verschil tussen cp en scp als -r en -R niet hetzelfde zijn. unix.stackexchange.com/questions/18712/... - Tarun


De beste manier is om rsync via SSH te gebruiken

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Mijn favoriete opties zijn -Pazvessh --verwijderen:

  • -a: archiefmodus (bevat veel standaard standaardopties, inclusief behoud van symlinks)
  • -z: comprimeren
  • -v: verbose: toon bestanden
  • -P: toon progess als bestanden gedaan / resterende bestanden
  • -e ssh: doe rsync in ssh-protocol
  • - wissen: verwijder bestanden in de bestemming die zich niet meer in de bron bevinden

4
2017-11-05 18:33



Alle versies van rsync die ik heb gebruikt zou gebruiken ssh standaard, dus -essh is waarschijnlijk niet nodig. En de keuze van het commando om verbinding te maken met de externe host heeft echt niets te maken met het recursief kopiëren. - kasperd


Na het zoeken naar de recursieve kopieervlag, en met succes gebruikt dankzij dit bericht, zou ik graag een suggestie plaatsen.

In het geval dat u een directory kopieert (recursief). Misschien als de bestanden gecomprimeerd worden verzonden, zou u tijd kunnen besparen bij de overdracht

Wat ik uiteindelijk deed was:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

Ik hoop dat dit helpt


3
2018-06-06 18:00



de bestandsextensie zou dat ook moeten zijn .tar.gz of .tgz aangezien het bestand een gzipped tar-archief is (sinds de -z vlag wordt gebruikt). - anthonybell


U kunt met deze eenvoudige opdracht een directory recursief naar een gecomprimeerd archief kopiëren:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Bijvoorbeeld om inhoud van te kopiëren /var/log van domain.com naar ~/logs.tgz jij rent:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

Je kunt ook bestanden uitpakken op het doelsysteem met behulp van pijpen. Met deze opdracht kopieert u de inhoud van /var/log op domain.com naar ~/destination/log op uw systeem:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Hoewel je een map moet spiegelen, zou je dit waarschijnlijk moeten gebruiken rsync...


1
2018-01-06 07:20