2011-05-26 1 views

Répondre

14

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 
+2

aussi court pour « catenate. » – Sean

+0

Belle réponse, mais quand il vient de Windows n'aura aucune idée de ce que vous voulez dire avec * someglob *;) – jm666

+0

@ 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 –

0

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

+2

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

+0

@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

+0

@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

0

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 
Questions connexes