write script programar example español ejemplos linux shell file ubuntu append

script - ¿Cómo agregar un archivo a otro en Ubuntu Linux?



shell script linux español (9)

Otra solución:

cat file1 | tee -a file2

tee tiene el beneficio que puede agregar a tantos archivos como desee, por ejemplo:

cat file1 | tee -a file2 file3 file3

adjuntará el contenido de file1 a file2 , file4 y file4 .

De la página del manual:

-a, --append append to the given FILEs, do not overwrite

Tengo dos archivos: file1 y file2 . ¿Cómo agrego el contenido de file2 a file1 para que el contenido de file1 persista en el proceso?


Pruebe este comando:

cat file2 >> file1


Solo como referencia, el uso de ddrescue proporciona una forma interrumpible de lograr la tarea si, por ejemplo, tiene archivos grandes y la necesidad de pausar y continuar en algún punto posterior:

ddrescue -o $(wc --bytes file1 | awk ''{ print $1 }'') file2 file1 logfile

El logfile es el bit importante. Puede interrumpir el proceso con Ctrl-C y reanudarlo especificando el mismo comando de nuevo y ddrescue leerá el logfile y continuará desde donde lo dejó. El indicador -o A le dice a ddrescue que comience desde el byte A en el archivo de salida ( file1 ). Así que wc --bytes file1 | awk ''{ print $1 }'' wc --bytes file1 | awk ''{ print $1 }'' solo extrae el tamaño del file1 en bytes (puede pegar la salida de ls si lo desea).

Como lo señaló ngks en los comentarios, el inconveniente es que ddrescue probablemente no se instalará por defecto, por lo que tendrá que instalarlo manualmente. La otra complicación es que hay dos versiones de ddrescue que pueden estar en tus repositorios: consulta esta pregunta de askubuntu para obtener más información. La versión que desea es el ddrescue de GNU, y en los sistemas basados ​​en Debian está el paquete llamado gddrescue :

sudo apt install gddrescue

Para otras distribuciones, revise su sistema de administración de paquetes para la versión GNU de ddrescue


También puedes hacer esto sin el cat , aunque honestamente el cat es más legible:

>> file1 < file2

El >> agrega STDIN a file1 y < dump file2 a STDIN .



el comando que buscas es

cat file2 >> file1


cat file2 >> file1

El operador >> agrega la salida al archivo nombrado o crea el archivo nombrado si no existe.

cat file1 file2 > file3

Esto concatena dos o más archivos a uno. Puede tener tantos archivos de origen como necesite. Por ejemplo,

cat *.txt >> newfile.txt

Actualización 20130902
En los comentarios, eumiro sugiere "no intente cat file1 file2 > file1 ". La razón por la que esto podría no resultar en el resultado esperado es que el archivo que recibe la redirección se prepara antes de que se ejecute el comando a la izquierda de > . En este caso, el primer file1 se trunca a la longitud cero y se abre para la salida, luego el comando cat intenta concatenar el archivo de longitud cero ahora más el contenido del file2 en el file1 . El resultado es que los contenidos originales de file1 se pierden y en su lugar hay una copia de file2 que probablemente no es lo que se esperaba.

Actualización 20160919
En los comentarios, tpartee sugiere vincularse con información / fuentes de respaldo. Para una referencia autorizada, dirijo al amable lector a la página de sh man en linuxcommand.org que dice:

Antes de que se ejecute un comando, su entrada y salida pueden redirigirse usando una notación especial interpretada por el shell.

Si bien eso le dice al lector lo que necesita saber, es fácil pasarlo por alto si no lo está buscando y analizando la declaración palabra por palabra. La palabra más importante aquí es "antes". La redirección se completa (o falla) antes de que se ejecute el comando.

En el caso de ejemplo de cat file1 file2 > file1 el shell realiza primero la redirección para que los identificadores de E / S estén en su lugar en el entorno en el que se ejecutará el comando antes de ejecutarse.

Se puede encontrar una versión más amigable en la que la prioridad de redirección se cubre en forma extensa en el sitio web de Ian Allen en forma de software de Linux. Su página de Notas de redirección de E / S tiene mucho que decir sobre el tema, incluida la observación de que la redirección funciona incluso sin un comando. Pasando esto a la cáscara:

$ >out

... crea un archivo vacío llamado out. El shell primero configura la redirección de E / S, luego busca un comando, no encuentra ninguno y completa la operación.


cat puede ser la solución fácil, pero se vuelve muy lenta cuando resolvemos archivos grandes, find -print es rescatarte, aunque tienes que usar cat una vez.

amey@xps ~/work/python/tmp $ ls -lhtr total 969M -rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt -rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt real 0m3.084s user 0m0.012s sys 0m2.308s amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name ''bigFile*'' -print0 | xargs -0 cat -- > outFile1 real 0m2.516s user 0m0.028s sys 0m2.204s


Nota : si necesitas usar sudo , haz esto:

sudo bash -c ''cat file2 >> file1''

El método habitual de simplemente anteponer sudo al comando fallará, ya que la escalada de privilegios no se traslada a la redirección de salida.