Comment copier un répertoire entier dans un répertoire du même nom sans remplacer le contenu du répertoire de destination? (au lieu de cela, j'aimerais ajouter au contenu du dossier de destination)
Comment copier un répertoire entier dans un répertoire du même nom sans remplacer le contenu du répertoire de destination? (au lieu de cela, j'aimerais ajouter au contenu du dossier de destination)
Réponses:
Utilisez rsyncet passez -usi vous voulez mettre à jour uniquement les fichiers les plus récents du répertoire d'origine ou --ignore-existingignorer tous les fichiers déjà présents dans la destination.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Notez le /côté source: sans cela rsync, il créerait /remote/directory/directory.)
--ignore-existingajoute sans remplacer, quelle perte de données voyez-vous?
rsyncfacilement disponible .... (comme Win32-OpenSSH)
--rsync-pathest nécessaire)
scp écrasera les fichiers si vous avez des droits en écriture.
En d'autres termes: vous pouvez faire scpen sorte que les fichiers soient ignorés en supprimant temporairement les autorisations d'écriture sur ces fichiers (si vous êtes le propriétaire des fichiers, c'est-à-dire).
scp -r user@server.com:/location/of/files/* /local/location/
Vous ne pouvez copier que les nouveaux fichiers par date. Utilisationfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Si vous pouvez rendre le contenu du fichier de destination en lecture seule:
find . -type f -exec chmod a-w '{}' \;
avant de courir scp(il va se plaindre et sauter les fichiers existants).
Et modifiez-les ensuite ( chmod +wpour obtenir une valeur basée sur umask). Si tous les fichiers n’ont pas l’autorisation d’écrire en fonction de votre umask, vous devrez peut-être stocker ces autorisations pour pouvoir les restaurer.
(La réponse de Gilles écrase les fichiers existants si, localement, ils sont plus récents, j'ai perdu de précieuses données de cette façon. Je ne comprends pas pourquoi cette réponse fausse et nuisible a autant de votes positifs).
rsync --ignore-existingavez-vous perdu des données?
find: missing argument to '-exec'utilisant cette commande, et avait plutôt à utiliser: find . -type f -exec chmod a-w {} \;. Mon linux est mauvais, ymmv.
find . -type f -exec chmod a-w {} \;
J'ai eu une tâche similaire, dans mon cas , je ne pouvais pas utiliser rsync, csyncou FUSE parce que mon stockage a seulement SFTP. rsyncimpossible de changer la date et l’heure du fichier, certains autres utilitaires (du type csync) m’ont montré d’autres erreurs: « Impossible de créer un fichier temporaire Clock skew détecté ».
Si vous avez accès au serveur de stockage, installez-le openssh-serverou lancez-le en rsynctant que démon ici.
Dans mon cas, je ne pouvais pas faire cela et la solution était: lftp . lftpL'utilisation de Syncronization est la suivante:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder- est le dossier sur mon PC, /rem/folder- est sftp://sft.domain.tld/rem/folder.
Vous pouvez trouver des pages de manuel par le lien: http://lftp.yar.ru/lftp-man.html
Pour copier tout un tas de fichiers, il est plus rapide de les archiver. En utilisant -k, vous évitez également que tar écrase les fichiers lors de sa décompression sur le système cible.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scpécrase les fichiers et il n’ya pas d’interrupteur pour l’interrompre, mais vous pouvez copier des choses comme vous le voulez, faire le scp, puis copier les fichiers existants. Exemples:
Copiez tous les fichiers existants en chemin
mkdir original_files ; cp -r * original_files/
Copier tout en utilisant scp
scp -r user@server:dir/* ./
Copiez les fichiers originaux sur tout ce que scp a écrit:
cp -r original_files/* ./
Pour ce faire, vous pouvez également effectuer une opération lsdans le dossier de destination:
Sur le dossier de destination distant:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
Sur source:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
Sur la destination:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
- >nouvelle ligne ou d'autres caractères spéciaux. 3. Coder en dur une boucle for dans un script python. Générer un programme à l'exécution est difficile et délicat (même lorsqu'il est effectué par des programmeurs professionnels), pour de nombreuses raisons. Générer un script shell est encore pire - une idée terrible.