Come posso ottenere il comando scp per sovrascrivere la cartella di destinazione


41

Sto usando il comando scp per copiare alcuni file su un pc remoto, come fai con scp :)

Prendo atto che il comportamento predefinito di una copia scp per i file è di sovrascrivere qualsiasi file esistente. Ora voglio copiare una cartella, quindi faccio sostanzialmente la stessa cosa:

scp -r <source_path> user@myOtherPc:<dest_path>

Dove le parti in <> sono i percorsi delle mie cartelle. Tuttavia, quando eseguo questo, ricevo il messaggio "il file esiste". C'è un modo per aggirare questo? una sorta di forza sovrascritta?

Grazie, Fodder


2
Potresti dare alcuni esempi di percorso? Non mi esibisco per riprodurlo sul mio sistema. Inoltre, hai controllato i permessi dei file?
Levans,

Ti dà qualche informazione utile se usi la modalità dettagliata? -v. Inoltre, stai utilizzando il percorso assoluto o relativo sul lato destinazione? Penso che se la cartella di destinazione esiste già, creerà il percorso di origine all'interno della cartella di destinazione anziché sovrascrivere ( testdir/testdir)
beroe

2
È strano che tu ottenga questo. Presumibilmente scp non ha noclobber ...
beroe

1
@Levans Non ho controllato i permessi, ho appena dato un'occhiata e penso che potresti avere ragione. Ho cancellato tutto nell'area di destinazione e ho ricominciato usando solo il comando "scp" e usando l'utente "root" e sono stato in grado di copiare i file / la cartella più volte :) ... Non sono sicuro al 100% quale problema di autorizzazione ho ho avuto, ma ora ho un "handle" sul problema che probabilmente posso immaginare, grazie
code_fodder

1
@beroe Sì, questo è quello che ho pensato anch'io ... mi ha confuso, ma penso di aver fatto una sorta di errore utente qui con le autorizzazioni, non sono ancora esperto di Linux :( Ma proverò la verbosità la prossima volta ho un problema del genere per avere maggiori informazioni, grazie. Ho anche notato che a volte si verifica la "cartella all'interno della cartella" ... ma questo è un altro problema: o
code_fodder

Risposte:


27

Come detto prima, scp sovrascrive felicemente qualsiasi file già presente.

Il problema "file esiste" può verificarsi solo quando hai qualche altro processo (come un processo scp simultaneo o qualcos'altro) che scrive cartelle e file nella stessa destinazione. Prendi invece in considerazione l'utilizzo di rsync.


1
Vorrei solo aggiungere: ... fintanto che hai accesso in scrittura a quel file ...
SDsolar

ma per le cartelle, unisce la cartella o la sostituisce?
Dr_Hope,

5

Come Levans, non sono stato in grado di replicare questo, ma hai preso in considerazione l'utilizzo di rsync su ssh? Se stai copiando un gran numero di file, rsync potrebbe essere un'opzione migliore di scp. Esistono numerose buone guide online, come queste:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

Quel primo collegamento riguarda i backup automatici tramite cron, quindi alcune delle istruzioni (come la creazione di una chiave ssh senza passphrase) potrebbero non essere rilevanti per te.


Interessante, non sapevo che puoi usare rsync in quel modo ... ho appena dato una rapida occhiata alla pagina man e sembra che tu possa usarla in un modo molto simile per scp con <source_path> e <user @ host: dest_path> parametri. Non sono sicuro al 100% che è quello che voglio poiché voglio sempre copiare / sovrascrivere senza preoccuparmi dello stato di ciò che è nel dest, ma comunque una buona idea :)
code_fodder

Sì, potrebbe valere la pena provare perché dovrebbe essere copiato sul file se è stato modificato (o la parte del file che è stata modificata, dovrei ricontrollare e sono un po 'troppo stanco, giusto) adesso).
Ben

ahah .... non preoccuparti di controllarlo, posso fare quella roba ... ma grazie per le informazioni :)
code_fodder

Ah, bello, posso smettere di guardare i fiammiferi come mezzo per aprire le palpebre. ;)
Ben

1
Questo può funzionare, ma è un po 'come usare una mazza per schiacciare una mosca. ;-)
SDsolar,

3

Riceverai questo messaggio di errore se la directory di destinazione contiene già un file con lo stesso nome della directory di origine che stai tentando di trasferire. Non è possibile avere un file con lo stesso nome di una directory nella stessa directory.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.