2010-01-27 12 views

Respuesta

355

Esto añade la salida a all.txt

cat *.txt >> all.txt 

Esto sobrescribe all.txt

cat *.txt > all.txt 
+18

puede que se encuentre con un problema en el que todos los gatos se copian en todos.txt ... A veces tengo este problema con grep, no estoy seguro si el gato tiene el mismo comportamiento. – rmeador

+5

@rmeador sí, eso es cierto, si all.txt ya existe, tendrá este problema. Este problema se resuelve proporcionando al archivo de salida una extensión diferente o moviendo all.txt a una carpeta diferente. –

+2

cat * .txt >> tmp; mv tmp all.txt (y asegúrese de que all.txt no exista de antemano) – Renaud

18

puede usar Windows Shell copy para concatenar archivos.

C:\> copy *.txt outputfile 

De la ayuda:

para anexar archivos, especifique un único archivo de destino, pero varios archivos de fuente (utilizando comodines o archivo1 + archivo2 + formato archivo3).

+0

Esto como la solución más limpia en mi humilde opinión, básicamente sin efectos secundarios por los que los principiantes podrían tropezar, lamentablemente no se aprecia lo suficiente :-( – Grmpfhmbl

27

Windows comando shell type puede hacer esto:

type *.txt >outputfile 

Tipo type comando también escribe los nombres de archivo en stderr, que no son capturadas por el operador de redirección > (pero se mostrará en la consola) .

+6

+1 para una solución nativa – Cheezmeister

+2

Solo tenga en cuenta que si coloca el archivo de salida en el mismo directorio que archivo original causará una duplicación porque también combinará dos veces el nuevo archivo de salida. – CathalMF

91

Solo recuerde, para todas las soluciones dadas hasta el momento, el shell decide el orden en que los archivos se concatenan. Para Bash, IIRC, eso es orden alfabético. Si el pedido es importante, debe asignar un nombre apropiado a los archivos (01file.txt, 02file.txt, etc.) o especificar cada archivo en el orden en que desea concatenarlo.

$ cat file1 file2 file3 file4 file5 file6 > out.txt 
4

la manera más pragmática con el shell es el comando cat. otras formas incluyen,

awk '1' *.txt > all.txt 
perl -ne 'print;' *.txt > all.txt 
+1

'perl -pe 1 * .txt> all.txt' –

+0

Esta debería ser la respuesta correcta para la mayoría de las circunstancias. Si cualquier archivo de texto sin una nueva línea vacía, utilizando todo el método 'cat' anterior concatenará la última línea y la primera línea de los archivos adyacentes. – mootmoot

-3

todo eso es desagradable ....

ls | grep *.txt | while read file; do cat $file >> ./output.txt; done; 

cosas fáciles.

+6

Eeek! No hagas eso. Haz' encontrar. -iname "* .txt" -maxdepth 1 -exec cat { } >> out.txt \; ' –

+6

Para cualquiera que se pregunte por qué no hacer esto: http://mywiki.wooledge.org/ParsingLs – Momer

3
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension] 

Por ejemplo:

type C:\*.txt > C:\1\all.txt 

que se llevará a todos los archivos txt en el directorio C: \ carpeta y lo guarda en C: \ 1 carpeta con el nombre de all.txt

o

type [source folder]\* > [destination folder]\[file name].[File extension] 

Por ejemplo:

type C:\* > C:\1\all.txt 

Eso tomará todos los archivos que están presentes en la carpeta y colocará Contenido en C: \ 1 \ all.txt

2

¿Qué tal este enfoque?

find . -type f -name '*.txt' -exec cat {} + >> output.txt 
+0

Desde OP dice que los archivos están en el mismo directorio, puede que necesite agregar '-maxdepth 1' al comando' find'. – codeforester

+0

Funciona muy bien con una gran cantidad de archivos, donde falla el enfoque de la respuesta aceptada – amine

Cuestiones relacionadas