¿Cómo puede eliminar todo el espacio en blanco final de un proyecto completo? Comenzando en un directorio raíz y eliminando el espacio en blanco final de todos los archivos en todas las carpetas.
Además, quiero poder modificar el archivo directamente, y no solo imprimir todo en stdout.
bash
whitespace
iamjwc
fuente
fuente
Respuestas:
Aquí hay una solución OS X> = 10.6 Snow Leopard.
Ignora las carpetas .git y .svn y sus contenidos. Además, no dejará un archivo de copia de seguridad.
fuente
\+
lugar de*
en la cadena de reemplazo; de lo contrario, coincide en cada línea.sed: RE error: illegal byte sequence
para mí.export LANG=C
e intente nuevamenteexport LC_CTYPE=C
que se encuentra aquí: stackoverflow.com/questions/19242275/…Utilizar:
si no desea que se generen los archivos ".bak":
como usuario de zsh, puede omitir la llamada para buscar y, en su lugar, usar:
Nota: Para evitar la destrucción de
.git
directorio, trate de añadir:-not -iwholename '*.git*'
.fuente
.git
directorios, sin importar cuán profundamente anidados.find . -not \( -name .svn -prune -o -name .git -prune \) -type f -print0 | xargs -0 perl -pi -e 's/ +$//'
rsync -rv --exclude=.git repo/ repo2/
que los cambios localesrepo
también estuvieran en el (sin daños)repo2
.Dos enfoques alternativos que también funcionan con las nuevas líneas de DOS (CR / LF) y hacen un trabajo bastante bueno para evitar archivos binarios :
Solución genérica que comprueba que el tipo MIME comienza con
text/
:Solución específica de repositorio de Git de Mat que utiliza la
-I
opción degit grep
omitir archivos que Git considera binarios:fuente
sed
la opción de sufijo-i
es opcional , pero en BSDsed
no lo es. Es estrictamente hablando, no es necesario aquí de todos modos, así que lo eliminaré.En Bash:
find dir -type f -exec sed -i 's/ *$//' '{}' ';'
Nota: Si está utilizando
.git
repositorio, trate de añadir:-not -iwholename '.git'
.fuente
Esto funcionó para mí en OSX 10.5 Leopard, que no utiliza GNU sed o xargs.
¡Solo tenga cuidado con esto si tiene archivos que deben excluirse (lo hice)!
Puede usar -prune para ignorar ciertos directorios o archivos. Para los archivos Python en un repositorio git, puede usar algo como:
fuente
find dir -not -path '.git' -iname '*.py' -print0 | xargs -0 sed --in-place=.bak 's/[[:space:]]*$//'
. Sustitúyalodir
por el directorio en cuestión como el nivel superior para recurrir.sed -i .bak
? ¿No debería sersed -i.bak
(sin el espacio)?Ack fue hecho para este tipo de tarea.
Funciona igual que grep, pero sabe que no debe descender a lugares como .svn, .git, .cvs, etc.
Mucho más fácil que saltar a través de aros con find / grep.
Ack está disponible a través de la mayoría de los administradores de paquetes (como ack o ack-grep ).
Es solo un programa Perl, por lo que también está disponible en una versión de un solo archivo que puede descargar y ejecutar. Ver: Instalar Ack
fuente
ack
es maravilloso. Lo he estado utilizando durante varios años y está disponible en casi todos los repositorios de paquetes para la mayoría de las distribuciones.ex
Intenta usar Ex editor (parte de Vim):
Nota: Para la recursividad (bash4 y zsh), utilizamos una nueva opción de globalización (
**/*.*
). Habilitadoshopt -s globstar
.Puede agregar la siguiente función en su
.bash_profile
:sed
Para usar
sed
, verifique: ¿Cómo eliminar espacios en blanco al final con sed?find
Busque el siguiente script (por ejemplo
remove_trail_spaces.sh
) para eliminar espacios en blanco finales de los archivos:Ejecute este script desde el directorio que desea escanear. En OSX al final, eliminará todos los archivos que terminan en
.bak
.O solo:
que es recomendado por Spring Framework Code Style .
fuente
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
solo elimina un espacio final en lugar de todos.Terminé no usando find y no creando archivos de respaldo.
Dependiendo de la profundidad del árbol de archivos, esta (versión más corta) puede ser suficiente para sus necesidades.
NOTA: esto también toma archivos binarios, por ejemplo.
fuente
En lugar de excluir archivos, aquí hay una variación de lo anterior, las listas explícitamente blancas de los archivos, en función de la extensión del archivo, que desea eliminar, no dude en sazonar al gusto:
fuente
-name "*.rb*"
Terminé ejecutando esto, que es una mezcla entre pojo y la versión adams.
Limpiará tanto los espacios en blanco finales, como también otra forma de espacios en blanco finales, el retorno de carro:
No tocará la carpeta .git si hay una.
Editar : lo hizo un poco más seguro después del comentario, al no permitir tomar archivos con ".git" o ".svn". Pero cuidado, que va a tocar archivos binarios si tienes alguna. Use
-iname "*.py" -or -iname "*.php"
después-type f
si solo desea que toque, por ejemplo, archivos .py y .php.Actualización 2 : ahora reemplaza todo tipo de espacios al final de la línea (lo que también significa pestañas)
fuente
Esto funciona bien ... agregar / eliminar --incluye para tipos de archivo específicos:
fuente
Rubí:
fuente
Yo uso expresiones regulares. 4 pasos:
Esto elimina todos los espacios finales al final de cada línea en todos los archivos. Y puede excluir algunos archivos que no se ajustan a esta necesidad.
fuente
1) Muchas otras respuestas usan
-E
. No estoy seguro de por qué, ya que esa es una opción de compatibilidad BSD no documentada .-r
debería usarse en su lugar.2) Otras respuestas de uso
-i ''
. Eso debería ser solo-i
(o-i''
si se prefiere), porque-i
tiene el sufijo justo después.3) Solución específica de Git:
El primero registra un alias git
check-whitespace
que enumera los archivos con espacios en blanco al final. El segundo corresed
sobre ellos.Solo uso en
\t
lugar de hacerlo,[:space:]
ya que normalmente no veo pestañas verticales, formularios de alimentación y espacios no rompibles. Su medida puede variar.fuente
Esto es lo que funciona para mí (Mac OS X 10.8, GNU sed instalado por Homebrew):
Se eliminaron los espacios finales, reemplaza las pestañas con espacios, reemplaza Windows CRLF con Unix
\n
.Lo interesante es que tengo que ejecutar esto 3-4 veces antes de que todos los archivos se arreglen,
gsed
siguiendo todas las instrucciones de limpieza .fuente