¿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 sequencepara mí.export LANG=Ce intente nuevamenteexport LC_CTYPE=Cque 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
.gitdirectorio, trate de añadir:-not -iwholename '*.git*'.fuente
.gitdirectorios, 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 localesrepotambié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
-Iopción degit grepomitir archivos que Git considera binarios:fuente
sedla opción de sufijo-ies opcional , pero en BSDsedno 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
.gitrepositorio, 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úyalodirpor 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
ackes 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.exIntenta 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:sedPara usar
sed, verifique: ¿Cómo eliminar espacios en blanco al final con sed?findBusque 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 fsi 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 .-rdebería usarse en su lugar.2) Otras respuestas de uso
-i ''. Eso debería ser solo-i(o-i''si se prefiere), porque-itiene el sufijo justo después.3) Solución específica de Git:
El primero registra un alias git
check-whitespaceque enumera los archivos con espacios en blanco al final. El segundo corresedsobre ellos.Solo uso en
\tlugar 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,
gsedsiguiendo todas las instrucciones de limpieza .fuente