J'ai quelque chose d'assez simple que je veux faire. Je souhaite utiliser montage
un répertoire contenant des milliers d'images, avec très peu d'options, à savoir:
me@home$ montage -size 256x256 DSC01*.JPG.svg output.png
... mais ce n'est tout simplement pas suffisant, car il ne capture qu'une centaine d'images à la fois; ni
me@home$ montage -size 256x256 *.svg output.png
... qui saisit toutes les images en même temps, car le fichier résultant est trop gros pour être analysé.
Ce que je veux faire, c'est répéter quelque chose comme 100 à 200 fichiers à la fois. Je suppose que cela pourrait être implémenté en utilisant une boucle for (?), Mais je suis juste un peu confus sur la façon de le faire. Je suppose qu'il y a probablement une façon intelligente d'utiliser find -exec
ou à xargs
laquelle je ne pense pas. J'utilise bash
, mais j'utilise zsh
occasionnellement.
Donc, en conclusion, je recherche un liner qui, étant donné 2600 fichiers image, appelle le montage environ 13 ou 26 fois (une fois pour 100-200 fichiers), et donné n fichiers, peut être appelé un multiple de n fois .
la source
DSC0100.JPG.svg
...DSC2600.JPG.svg
?Réponses:
Une
bash
méthode, utilisant des fonctionnalités de tableau spéciales; probablement traduisiblezsh
avec quelques modifications:la source
Vous pouvez utiliser des xargs pour cela; malheureusement, il n'est pas possible de combiner -I (pour insérer au milieu d'une ligne de commande) et -L (pour limiter le nombre de fichiers pour un seul appel à l'exécutable). Par conséquent, j'ai créé cette ligne de commande à titre d'exemple (mais méfiez-vous des caractères spéciaux dans les noms de fichiers, ils ne sont pas pris en charge):
Supprimez le
echo
si vous voulez vraiment exécuter la commande.Mises en garde:
Mise à jour:
C'est la boucle for correspondante, qui (j'espère) résout le problème des espaces dans les noms de fichiers:
Mise à jour 2: une solution python, qui devrait être à l'abri des caractères spéciaux dans les noms de fichiers
la source
ls
dans un tuyau pour analyser sa sortie, vous devez également mettre en garde contre les nombreux dangers de le faire bien en évidence et au début pour vous assurer que les gens le voient.*.svg
(c'est pourquoi j'ai posté un commentaire sur la question posée). Dans le cas le plus général où vous devez gérer tous les noms de fichiers, vous devez recourir à la globalisation du shell et aux tableaux oufind -print0 | xargs -0
constructions. Voir ma réponse pour un exemple de la première.Voici une version utilisant xargs qui est sans danger pour n'importe quel nom de fichier, mais nécessite un fichier temporaire pour stocker le nombre. Ajustez le '-n 100' pour ajuster le nombre de fichiers par montage. Vous pouvez également échanger le "printf" avec un "find -print0", mais assurez-vous qu'il ne trouve pas "count.temp".
la source
Avec GNU Parallel, vous pouvez faire:
Il est bien sûr sûr pour les fichiers avec des caractères spéciaux (comme vous pouvez normalement vous y attendre de GNU Parallel).
Installation minimale
Si vous avez juste besoin de parallèle et que «make» n'est pas installé (peut-être que le système est ancien ou Microsoft Windows):
Regardez la vidéo d'introduction pour une introduction rapide: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1 ou sur http://tinyogg.com/watch/TORaR/ et http://tinyogg.com/watch/hfxKj /
la source