Admin/Dev

12
Févr.
2021

Créer une archive contenant quelques fichiers parmi une longue liste, avec le terminal

Publié par sky

Voici un cas particulier comme je les affectionne, mais avec une solution technique permettant de gagner beaucoup de temps.

Je dispose d'un dossier contenant plusieurs milliers d'images, appelées de img1.png à img9245.png. Mon but est de faire une archive comprenant les images depuis l'index 8311 jusqu'à la fin. Ce dossier est situé sur un Mac distant auquel j'accède via SSH.

Evidemment, je pourrais récupérer l'ensemble des fichiers sur mon Mac, faire l'archive puis renvoyer le fichier. Cependant, cela ne serait pas très optimal, d'une part parce que la copie prendrait du temps, qui faudrait faire la copie en retour, et que de copier le dossier userait mon disque sans aucun intérêt.

En bref, réaliser l'archive à distance est l'unique solution viable dans mon cas.

Je pourrais très bien ajouter les fichiers un à un dans une archive, mais cela prendrait un certain temps pour insérer les presque 900 fichiers. Voici la solution utilisée pour créer une archive ZIP.

zip img.zip `find . -regex ".*/img831[1-9]\.pdf"`
zip img.zip `find . -regex ".*/img83[2-9][0-9]\.pdf"`
zip img.zip `find . -regex ".*/img8[4-9][0-9]{2}\.pdf"`
zip img.zip `find . -regex ".*/img9[0-9]{3}\.pdf"`

Explications ?

Les commandes sont donc composées de deux parties.

La première est tout simplement la commande zip, suivi du nom de mon archive.

L'application en ligne de commande zip ajoute les fichiers au fur et à mesure, lorsque l'on indique la même archive.

La seconde partie est une commande find combinée à une expression régulière pour retourner la liste des fichiers à ajouter à l'archive.

Il s'agit ici d'expressions régulières très simples, qui permettent en 4 commandes d'ajouter tous les fichiers qui nous intéresse. Il serait possible d'obtenir le même résultat avec une seule commande, mais au prix d'une expression régulière bien plus complexe, et donc prenant plus de temps à écrire.

La première commande, avec l'expression régulière

".*/img831[1-9]\.pdf" 

va retourner tous les fichiers entre img8311.png et img8319.png.
La seconde

".*/img83[2-9][0-9]\.pdf"

va permettre d'insérer les fichiers dont l'index se trouve entre 8320 à 8399.
La troisième

".*/img8[4-9][0-9]\{2\}\.pdf"

reverra les fichiers de img8400 à img8999. Et enfin, la dernière

".*/img9[0-9]\{3\}\.pdf"

permettra de prendre tous les fichiers de 9000 à 9999, sachant que dans notre cas, cela s'arrêtera au dernier fichier nommé img9245.png.

Et voilà, le tour est joué.

 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer