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 rsynce passare -use si desidera aggiornare solo i file più recenti nella directory originale o --ignore-existingsaltare 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 rsynccreerebbe /remote/directory/directory.)
--ignore-existingaggiunge senza sostituire, quale perdita di dati vedi?
rsyncfacilmente 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 scpmodo 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 +wper 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-existinghai 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, csynco FUSE perché il mio stoccaggio ha solo SFTP. rsyncnon è 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-servero avvia rsynccome demone qui.
Nel mio caso - non potevo farlo e la soluzione era: lftp . lftpL'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>'
scpsovrascrive 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 lsnella 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.