Come copio un'intera directory in una directory con lo stesso nome senza sostituire il contenuto nella directory di destinazione? (invece, vorrei aggiungere al contenuto della cartella di destinazione)
Come copio un'intera directory in una directory con lo stesso nome senza sostituire il contenuto nella directory di destinazione? (invece, vorrei aggiungere al contenuto della cartella di destinazione)
Risposte:
Utilizzare rsync
e passare -u
se si desidera aggiornare solo i file più recenti nella directory originale o --ignore-existing
saltare tutti i file già esistenti nella destinazione.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Nota /
sul lato sorgente: senza di essa rsync
creerebbe /remote/directory/directory
.)
--ignore-existing
aggiunge senza sostituire, quale perdita di dati vedi?
rsync
facilmente disponibile .... (Come Win32-OpenSSH)
--rsync-path
è necessario un pacchetto di terze parti )
scp sovrascriverà i file se si dispone dei permessi di scrittura.
In altre parole: puoi fare in scp
modo che i file vengano saltati in modo efficace rimuovendo temporaneamente le autorizzazioni di scrittura (se sei il proprietario dei file).
scp -r user@server.com:/location/of/files/* /local/location/
È possibile copiare solo i nuovi file per data. Usofind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Se è possibile rendere il contenuto del file di destinazione di sola lettura:
find . -type f -exec chmod a-w '{}' \;
prima di eseguire scp
(si lamenterà e salterà i file esistenti).
E cambiarli successivamente ( chmod +w
per ottenere il valore basato su umask). Se i file non hanno tutti i permessi di scrittura in base alla tua umask, dovresti in qualche modo archiviare i permessi per poterli ripristinare.
(La risposta di Gilles sovrascrive i file esistenti se localmente sono più recenti, in questo modo ho perso dati preziosi. Non capisco perché quella risposta sbagliata e dannosa abbia così tanti voti positivi).
rsync --ignore-existing
hai fatto a perdere i dati?
find: missing argument to '-exec'
con questo comando, e invece ha dovuto usare: find . -type f -exec chmod a-w {} \;
. Il mio Linux è cattivo, ymmv.
find . -type f -exec chmod a-w {} \;
Ho avuto un compito simile, nel mio caso non ho potuto usare rsync
, csync
o FUSE perché il mio stoccaggio ha solo SFTP. rsync
non è stato possibile modificare la data e l'ora per il file, alcune altre utilità (come csync
) mi hanno mostrato altri errori: " Impossibile creare il file temporaneo Skew rilevato ".
Se hai accesso al server di archiviazione, installa openssh-server
o avvia rsync
come demone qui.
Nel mio caso - non potevo farlo e la soluzione era: lftp . lftp
L'uso per la sincronizzazione è inferiore:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder
- è la cartella sul mio PC, /rem/folder
- è sftp://sft.domain.tld/rem/folder
.
Puoi trovare le pagine man tramite il link: http://lftp.yar.ru/lftp-man.html
Per copiare un sacco di file, è più veloce tararli. Usando -k si impedisce anche a tar di sovrascrivere i file quando si scompatta il pacchetto sul sistema di destinazione.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scp
sovrascrive i file e non c'è alcun interruttore per impedirlo, ma puoi copiare le cose a modo tuo, fare lo scp e quindi copiare nuovamente i file esistenti. Esempi:
Copia tutti i file esistenti fuori strada
mkdir original_files ; cp -r * original_files/
Copia tutto usando scp
scp -r user@server:dir/* ./
Copia i file originali su tutto ciò che scp ha scritto:
cp -r original_files/* ./
Un altro modo per ottenere questo è quello di fare un ls
nella cartella di destinazione:
Nella cartella di destinazione remota:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
Sulla fonte:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
A destinazione:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
-
>
spazio newline o altri caratteri speciali. 3. Hard-code a for-loop in uno script Python. Generare un programma in fase di esecuzione è difficile e complicato (anche se fatto da programmatori professionisti), per molte ragioni. Generare uno script di shell è anche peggio: un'idea terribile.