Base de connaisances

Regrouper un grand nombre de fichiers en un

leave a comment »

Avant-propos

On se demande parfois comment mettre ensemble un grand nombre de fichiers. Par exemple de petites vidéos récupérées suite à un problème de disque avec un utilitaire du marché gratuit ou payant. On va essayer 3 méthodes avec plus ou moins de succès selon le nombre de fichiers. Je tiens à vous avertir que la deuxième méthode est la seule à gérer au moins 12’000 fichiers avec une rapidité déconcertante.

On trouve sur le marché un certain nombre d’outils qui permettent de regrouper des fichiers. Dès que le nombre des fichiers grandis et qu’ils ne sont pas formatés exactement comme devrait être une vidéo, alors nous avons des problèmes. Pour ce faire, nous allons utiliser des outils propre au monde Unix. Ces outils sont cat, ls et xargs.

cat

Si nous avons un petit nombre de fichiers, nous pouvons sans autre faire avec la commande cat. Comme son nom l’indique, cat revient à dire « concatène et affiche ». On va exécuter un commande du style

cat * > ../fichier_sortie

Le fichier « fichier_sortie » se placera dans le dossier parent lorsque la commande aura fini. Une erreur peut se produire qui mentionne que la commande a trop d’argument. Cette erreur est la suivante :  -bash: /bin/cat: Argument list too long. La commande cat prend chaque fichier comme un argument et ne gère qu’un nombre limité de fichiers.

cat+ ls + xargs

On passe par xargs qui une commande gérant des listes. Nous allons lui mettre en passer en paramètre d’entrée un liste qui correspond au contenu du dossier courant ce que cat avant de la peine à faire lorsque les nombres était trop grand. La commande utilisée dans ce cas est

ls | xargs -n 32 -P 8 cat >> ../fichier_sortie

Comme précédemment le fichier de sortie se placera dans le dossier parent. Nous allons décomposer la commande afin de comprendre ce qui se passe. Le ls envoie la liste des fichiers en entrée. Le paramètre n est le nombre de paramètres traités et et le P est le nombre concurrent de processus sur le même programme. On utilise toujours l’outil cat pour mettre nos fichiers ensemble.

Le nombre d’argument permet de ne prendre que les 32 premiers fichiers par exemple. Si vous avez un grand nombre de fichiers, le paramètre n n’a pas besoin d’être mentionné si on souhaite traiter un grand nombre de fichiers. On arrive à une commande du style.

ls | xargs  -P 8 cat >> ../fichier_sortie

On peut modifier la liste en entrée de l’outil xargs. On peut prendre les fichiers vidéos qui commence par « Movie-10 » et termine par un numéro qui est soit 3 soit 4. On arrive sur une commande qui ressemble celle-ci dessous.

ls | grep « ^Movie-10[3-4] » | xargs -P 8 cat >> ../movie_3_4.mpg

Olivier

Written by olivier

27 juillet 2015 à 12:00

Publié dans Mac OS X, Movies, Sauvegarde, Vidéos

Tagged with , , ,

Laisser un commentaire