bien, después de quejarse en los comentarios, hay mi mejor solución primer lugar, usted quiere saber, qué archivos son los saltos de línea faltaba:
find -type f -exec sh -c "tail -1 {} | xxd -p | tail -1 | grep -v 0a$" ';' -print
No es super rápido (llamar a un par de procesos para cada archivo), pero está bien para un uso práctico.
Ahora, cuando lo tienes, es posible que así agregar la nueva línea, con otro -exec
:
find -type f -exec sh -c "tail -1 {} | xxd -p | tail -1 | grep -v 0a$" ';' -exec sh -c "echo >> {}" ';'
posibles trampas:
si los nombres de archivo son malas, por ejemplo, tienen espacios, puede necesitar tail -1 \"{}\"
. ¿O lo hace hacerlo bien?
es posible que desee agregar más filtros para buscar, como -name \*py
, o similares.
pensar en posibles DOS/Unix nuevas líneas lío antes de su uso (corregir eso primero).
EDIT:
Si no te gusta el resultado de estos comandos (haciéndose eco de algunos hex), añadir -q
a grep:
find -type f -exec sh -c "tail -1 {} | xxd -p | tail -1 | grep -q -v 0a$" ';' -print
find -type f -exec sh -c "tail -1 {} | xxd -p | tail -1 | grep -q -v 0a$" ';' -exec sh -c "echo >> {}" ';'
Ninguna de las soluciones funciona para mí –
Si quieres que funcione recursivamente, puedes cambiar '*' con '$ (find. -type f)' o '$ (find -type f -name )' –
durron597