Usar cat
con redirección de salida. Sintaxis: cat file [file] [[file] ...] > joined-file
.
Ejemplo con solo dos archivos (puede tener muchos más):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
En caso de que tenga "muchos documentos", utilice el patrón de concha (patrones):
cat input-files-dir/* > joined-file
Esto unirá todos los archivos en ese directorio al directorio actual (evitando que coincida con el archivo de salida). Es totalmente independiente del uso cat
y la redirección de salida: solo Bash proporciona todos los archivos como argumentos cat
.
Tipos de archivo
Simplemente pegará (unirá) archivos juntos como lo haría con papel y cinta. No le importa que el formato de archivo real sea capaz de manejar esto. Funcionará para archivos de texto, pero no para PDF, ODT, etc. Bueno, los unirá, pero ya no es un PDF / ODT válido.
Orden de unión
Como señaló phoibos, el bloqueo de shell dará como resultado un orden alfabético de los nombres de los archivos. Así es como funciona Bash y shell globbing.
Anexo sobre input file is output file
error
Cuando el patrón de los archivos de entrada coincide con el mismo archivo que el de salida, esto causará un error. Es una característica de seguridad. Ejemplo: cat *.txt > out.txt
ejecutar la segunda vez causará esto.
Lo que puedes hacer al respecto:
- Elija un patrón más específico para que coincida con los archivos de entrada reales, que no coincida con el nombre de salida. Ejemplo: el patrón de los archivos de entrada
*.txt
con el archivo de salida output.out
no colisionará.
- Trabaja en diferentes directorios. En el ejemplo anterior, he usado un
input-files-dir
directorio separado para colocar todos los archivos y enviarlos al directorio de trabajo actual. Esto hace que sea imposible obtener este error.
ls
solo para enumerar las coincidencias. Por ejemplo,ls *.txt
para ver qué se compara.Una forma simple de hacerlo es usando cat:
Si solo emite
cat file1 file2
, verá ambos archivos en la salida estándar. Al usar>
, solo está redirigiendo la salida estándar a un archivo. Eso funcionará también con otros comandos.fuente
Hazlo con un bucle simple:
>>
se agrega al archivo.Nota: Si por alguna razón tiene que ejecutar el comando nuevamente, debe eliminarlo
complete.txt
, de lo contrario, escribiría el archivo en sí mismo, lo que no funciona.fuente
cat
.cat *.txt
. El bucle for debe estar ordenado.for
en Bash o en cualquier otro lugar.Si los archivos que desea combinar terminan
.txt
, manténgalo simple:Si el directorio solo contiene archivos de texto, también es simple:
(Tenga en cuenta que una vez que cree
combined.txt
, hacerlo nuevamente lo incluiría en la expansión de*
, lo que llevaría a un comportamiento extraño).Si desea seleccionar algunos archivos en el directorio y no otros, es mejor si los nombres de archivo le permiten distinguir cuáles desea. Si no, puedes ponerte elegante
find
. Pero dudo que necesites ir tan lejos.fuente
La secuencia de comandos de acción personalizada de Thunar escrita por cipricus también me inspiró a escribir una secuencia de comandos Nautilus similar y pensé que podría ser útil para otros que miran estas preguntas y respuestas como referencia sobre este tema. Asi que aqui esta:
fuente
Este es un complemento y una variación de las otras respuestas, relacionadas con poner estas soluciones a trabajar en las acciones personalizadas de Thunar.
No todos son utilizables de esta manera, pero algunos sí.
Pensé que lo más interesante sería poder fusionar archivos seleccionados del menú contextual de Thunar .
Esta es una variación de lo que sugirió Sadi en un comentario a la respuesta de gertvdijk :
Solo se unirán los archivos seleccionados. Restrinja las condiciones de apariencia a los archivos de texto.
Un agradecimiento especial a Sadi cuyo comentario me proporcionó la solución más clara y actualizada a mi problema.
Acepté gertvdijk 's respuesta como definitivo. No solo fue la ocasión para el comentario de Sadi, sino que parece ser de mayor valor para otros, ya que proporciona una solución bien argumentada y completa (aunque algo por encima de mis habilidades de lectura de CLI).
fuente
Puedes probar el
find
comando también,Encuentra
.txt
archivos dentro del directorio actual y ejecuta elcat
comando en cada archivo fundado. Finalmente, toda la salida se redirigió al nombre del archivofile
(creado dentro de la corriente directamente).Explicación:
fuente
También podría usar una utilidad en línea como merge-files-online.com
fuente