GNU/Linux >> Tutoriels Linux >  >> Linux

rsync N fichiers les plus récents dans un répertoire

Le moyen le plus simple consiste à exécuter zsh au lieu de bash.

rsync -a -- /path/to/directory/*(om[1,42]) remote-server:

Entre parenthèses, om ordonne les fichiers par heure de modification inverse (c'est-à-dire par âge croissant) et [1,42] sélectionne les 42 premières correspondances.

Si vous ne voulez que des fichiers normaux et non des répertoires, ajoutez un . après la parenthèse ouvrante. Pour plus de possibilités, regardez sous "glob qualificateurs" dans le zshexpn page de manuel.

Si vous souhaitez faire correspondre les fichiers dans l'arborescence des répertoires enracinés à /path/to/directory , plutôt que juste à l'intérieur de ce répertoire, utilisez /path/to/directory/**/*(.om[1,42]) . Cela enverra cependant tous les fichiers dans le même répertoire sur la cible.


En supposant que vous souhaitiez envoyer des fichiers depuis le répertoire de travail actuel :

rsync `ls -tp | grep -v / | head -n <n>` <destination> <options>

fera l'affaire. Par exemple :

rsync `ls -tp | grep -v / | head -n 10` [email protected]:/dest/dir/ --progress --compress

Cela donnera une erreur s'il n'y a aucun fichier à trouver dans le répertoire de travail actuel, ou si l'un des premiers fichiers contient des espaces ou d'autres caractères spéciaux.

Les caractères ` autour de ls -tp | grep -v / | head -n <n> dites à bash d'exécuter les commandes et de les remplacer par la liste de fichiers résultante sous la forme d'une liste séparée par des espaces. Le -t l'option indique ls pour trier par horodatage, le -p lui dit d'ajouter un / après les noms de répertoire et la partie grep filtre les lignes se terminant par / de sorte que vous ne finissiez pas par envoyer des répertoires. Ajouter -c au ls options si vous voulez que les fichiers les plus récents soient jugés par l'heure de création au lieu de l'heure de modification (notez cependant que certains programmes supprimeront et remplaceront les fichiers au lieu de les mettre à jour afin que ctime et mtime puissent être identiques même si un fichier semble avoir existé plus longtemps ).

Je ne prétendrai pas que c'est sans doute le plus simple façon, mais ce serait la façon dont je pensais en premier.

(sous-question-dans-un-commentaire de mwm)

qu'en est-il de l'inverse ? serveur vers local ?

Ce serait un peu plus complexe car je ne pense pas que vous puissiez avoir plusieurs sources de fichiers distantes sur la ligne de commande rsync comme vous le pouvez en local. Vous pouvez exécuter rsync sur le serveur via plus de ssh , ouvrant un tunnel vers votre sshd local (avec le même ssh l'appel via lequel vous exécutez rsync) pour recevoir la connexion, a essentiellement utilisé la même commande de l'autre côté.


Linux
  1. Renommer les fichiers dans le répertoire ?

  2. Comment désactiver sélectivement Rsync ?

  3. Copier les premiers fichiers N dans un répertoire différent ?

  4. Exemples pratiques de la commande rsync sous Linux

  5. Utiliser rsync pour synchroniser les fichiers

Comment compter les fichiers dans le répertoire sous Linux

Exemples Rsync pour transférer des fichiers sous Linux

Comment utiliser Rsync

Comment compter les fichiers dans le répertoire sous Linux

Compter le nombre de fichiers dans un répertoire sous Linux

Exemples de commandes Linux rsync