Concatenando múltiples archivos de texto en un solo archivo en Bash

¿Cuál es la forma más rápida y más pragmática de combinar todo el archivo * .txt en un directorio en un archivo de texto grande?

Actualmente estoy usando windows con cygwin, así que tengo acceso a BASH.

El comando de shell de Windows sería bueno también, pero dudo que haya uno.

Esto agrega la salida a all.txt

cat *.txt >> all.txt 

Esto sobrescribe todo.txt

 cat *.txt > all.txt 

Solo recuerde, para todas las soluciones dadas hasta ahora, el intérprete de comandos decide el orden en que los archivos están concatenados. 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 

El type comando de shell de Windows puede hacer esto:

 type *.txt >outputfile 

El comando type también escribe nombres de archivo en stderr, que no son capturados por el operador > redirect (pero aparecerán en la consola).

Puede usar la copy shell de Windows para concatenar archivos.

 C:\> copy *.txt outputfile 

De la ayuda:

Para agregar archivos, especifique un solo archivo para el destino, pero varios archivos para el origen (con comodines o formato file1 + file2 + file3).

la forma 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 
 type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension] 

Por ejemplo:

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

Eso tomará todos los archivos txt en la carpeta C: \ y guárdelos en la carpeta C: \ 1 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

Tenga cuidado, porque ninguno de estos métodos funciona con una gran cantidad de archivos. Personalmente, utilicé esta línea:

 for i in $(ls | grep ".txt");do cat $i >> output.txt;done 

¿Qué hay de este enfoque?

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

todo eso es desagradable …

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

cosas fáciles