Respuestas:
Esto agrega la salida a all.txt
cat *.txt >> all.txt
Esto sobrescribe all.txt
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
Solo recuerde, para todas las soluciones dadas hasta ahora, el shell decide el orden en que se concatenan los archivos. Para Bash, IIRC, ese es el orden alfabético. Si el orden es importante, debe nombrar los archivos adecuadamente (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 comando de shell de Windows type
puede hacer esto:
type *.txt >outputfile
El type
comando Tipo también escribe nombres de archivo en stderr, que no son capturados por el >
operador de redireccionamiento (pero aparecerán en la consola).
Puede usar el shell de Windows copy
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 (utilizando comodines o formato de archivo1 + archivo2 + archivo3).
Tenga cuidado, porque ninguno de estos métodos funciona con una gran cantidad de archivos. Personalmente, usé esta línea:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDITAR: como alguien dijo en los comentarios, puede reemplazar $(ls | grep ".txt")
con$(ls *.txt)
EDITAR: gracias a la experiencia de @gnourf_gnourf, el uso de glob es la forma correcta de iterar sobre los archivos en un directorio. En consecuencia, las expresiones blasfemas como $(ls | grep ".txt")
deben ser reemplazadas por *.txt
(ver el artículo aquí ).
Buena solución
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
negativo , porque es un antipatrón muy malo).
ls *.txt
fallaría si hay demasiados archivos (la lista de argumentos es demasiado larga)?
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
cat
método anterior concatenará la última línea y la primera línea de los archivos adyacentes.
¿Qué tal este enfoque?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
al find
comando.
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
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 lo guardará 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
Puedes hacer así:
cat [directory_path]/**/*.[h,m] > test.txt
Si {}
suele incluir la extensión de los archivos que desea buscar, hay un problema de secuencia.
Cuando se encuentra con un problema en el que se conecta all.txt a all.txt, puede intentar verificar si all.txt existe o no, si existe, elimine
Me gusta esto:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
el comando sobrescribe all.txt si existe >>
agrega datos al archivo existente
todo eso es desagradable ...
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
cosas fáciles
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;