2011-05-07 20 views

Respuesta

28

Para añadir una nueva línea al final de un archivo:

echo >>file 

Para añadir una línea al final de cada archivo en el directorio actual:

for x in *; do echo >>"$x"; done 

Si usted no sabe de antemano si cada archivo termina en una nueva línea, primero pruebe el último carácter. tail -c 1 imprime el último carácter de un archivo. Como la sustitución de comando trunca cualquier nueva línea final, $(tail -c 1 <file) está vacío si el archivo está vacío o termina en una línea nueva, y no está vacío si el archivo termina en un carácter que no es de línea nueva.

for x in *; do if [ -n "$(tail -c 1 <"$x")" ]; then echo >>"$x"; fi; done 
+1

¿por qué 'tail -c 1' no devuelve nada si el archivo termina en una nueva línea? –

+3

@MuMind: 'tail -c 1' siempre devuelve el último carácter, ya sea una nueva línea o no. Es la construcción de sustitución de comando del shell '$ (...)' que elimina las nuevas líneas finales. Entonces, si 'tail -c 1' genera solo un carácter que no sea de nueva línea, obtienes ese caracter. Si 'tail -c 1' solo genera un carácter de nueva línea, o nada (archivo vacío), no obtienes nada. – Gilles

+0

Si no desea agregar la nueva línea a los archivos vacíos, use ... 'if [-s" $ x "-a -n" $ (tail -c 1 <"$ x") "]; then' ... –

1
echo >> filename 

probarlo antes de su uso masivo :)

5

Vim es grande para eso porque si no se abre un archivo en binary modo, terminará automáticamente el archivo con la línea que termina detectado.

Así:

vim file -c 'wq' 

debería funcionar, independientemente de si los archivos tienen Unix, Windows o Mac de gama de estilo de línea.

Cuestiones relacionadas