Quel est le moyen le plus rapide de fusionner des milliers de petits fichiers en un seul fichier?perl, unix: moyen le plus rapide de fusionner des milliers de petits fichiers en un seul fichier
grâce
Quel est le moyen le plus rapide de fusionner des milliers de petits fichiers en un seul fichier?perl, unix: moyen le plus rapide de fusionner des milliers de petits fichiers en un seul fichier
grâce
La commande cat
fonctionne bien:
cat *someglob* > output.txt
son nom (abréviation de con chat enate) donne même loin son but.
Si votre liste d'arguments est trop longue (c'est-à-dire que trop de fichiers correspondent à la glob), vous pouvez toujours utiliser la commande find
et acheminer les arguments vers xargs
.
find . -name \*someglob\* -print0 | xargs -0 cat > output.txt
Je suis sûr que cat
est plus rapide et plus simple, mais voici une version perl, juste parce que vous avez demandé à ce sujet.
perl -pe1 *.txt > all.txt
Avec l'aimable autorisation de ikegami
Vous traitez les résultats du glob comme glob. C'est un bug. Par exemple, il échoue si vous avez un fichier nommé 'foo bar.txt'. Correction: 'perl -pe1 * .txt> all.csv' – ikegami
@ikegami qui me donne l'erreur" Impossible d'ouvrir * .txt: Argument invalide. " Je suis sur Windows, peut-être que le shell bash étend les variables de Perl avant qu'elles ne soient passées, je ne pourrais pas le dire. Sur mon système, les variables (même les globs) sont transmises telles quelles. Cela fonctionne très bien avec 'foo bar.txt'. – TLP
@TLP, Bouilloire noire? Votre solution ne s'exécute pas non plus dans le shell cmd. Plus important encore, il ne fonctionne pas dans bash, ce qui est certainement ce que l'OP veut. – ikegami
Dans le cas où il est plus utile, voici un exemple de la façon dont vous pouvez le faire sur la ligne de commande:
cd dir_with_thousand_files
cat *.txt > onebigfile.txt
aussi court pour « catenate. » – Sean
Belle réponse, mais quand il vient de Windows n'aura aucune idée de ce que vous voulez dire avec * someglob *;) – jm666
@ jm666: Le titre de la question et les balises comprennent "unix". Mais la vérité est, un "glob" a la même signification sur les systèmes de type Unix et Windows ... C'est un modèle qui peut être utilisé pour faire correspondre un tas de chaînes –