Como você pode remover todo o espaço em branco à direita de um projeto inteiro? Iniciando em um diretório raiz e removendo o espaço em branco à direita de todos os arquivos em todas as pastas.
Além disso, quero poder modificar o arquivo diretamente, e não apenas imprimir tudo no stdout.
bash
whitespace
iamjwc
fonte
fonte
Respostas:
Aqui está uma solução para o OS X> = 10.6 Snow Leopard.
Ignora as pastas .git e .svn e seu conteúdo. Também não deixará um arquivo de backup.
fonte
\+
vez de*
na sequência de substituição - caso contrário, ele corresponderá em cada linha.sed: RE error: illegal byte sequence
para mim.export LANG=C
e tente novamenteexport LC_CTYPE=C
como encontrado aqui: stackoverflow.com/questions/19242275/…Usar:
se você não deseja que os arquivos ".bak" sejam gerados:
como usuário zsh, você pode omitir a chamada para localizar e, em vez disso, usar:
Nota: Para evitar destruir
.git
diretório, tente adicionar:-not -iwholename '*.git*'
.fonte
.git
diretórios, não importa quão profundamente aninhado.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 as alterações locaisrepo
também estavam no (sem danos)repo2
.Duas abordagens alternativas que também funcionam com as novas linhas do DOS (CR / LF) e fazem um bom trabalho para evitar arquivos binários :
Solução genérica que verifica se o tipo MIME começa com
text/
:Solução específica do repositório Git da Mat, que usa a
-I
opção degit grep
pular arquivos que o Git considera binários:fonte
sed
a opção de sufixo-i
é opcional , mas no BSDsed
não é. Estritamente falando, não é necessário aqui de qualquer maneira, então vou removê-lo.No Bash:
find dir -type f -exec sed -i 's/ *$//' '{}' ';'
Nota: Se você estiver usando
.git
repositório, tente adicionar:-not -iwholename '.git'
.fonte
Isso funcionou para mim no OSX 10.5 Leopard, que não usa GNU sed ou xargs.
Apenas tenha cuidado com isso se você tiver arquivos que precisam ser excluídos (eu fiz)!
Você pode usar -une para ignorar determinados diretórios ou arquivos. Para arquivos Python em um repositório git, você pode usar algo como:
fonte
find dir -not -path '.git' -iname '*.py' -print0 | xargs -0 sed --in-place=.bak 's/[[:space:]]*$//'
. Substituadir
pelo diretório em questão como o nível superior de onde recorrer.sed -i .bak
? Não deveria sersed -i.bak
(sem espaço)?A confirmação foi feita para esse tipo de tarefa.
Funciona como grep, mas sabe que não desce para lugares como .svn, .git, .cvs, etc.
Muito mais fácil do que saltar por aros com o find / grep.
O ack está disponível na maioria dos gerenciadores de pacotes (como ack ou ack-grep ).
É apenas um programa Perl, por isso também está disponível em uma versão de arquivo único que você pode apenas baixar e executar. Consulte: Instalação Ack
fonte
ack
é maravilhoso. Utiliza-o há vários anos e está disponível em quase todos os repositórios de pacotes para a maioria das distribuições.ex
Tente usar o editor Ex (parte do Vim):
Nota: Para recursão (bash4 e zsh), usamos uma nova opção de globbing (
**/*.*
). Ativar porshopt -s globstar
.Você pode adicionar a seguinte função ao seu
.bash_profile
:sed
Para usar
sed
, verifique: Como remover os espaços em branco à direita com o sed?find
Localize o seguinte script (por exemplo
remove_trail_spaces.sh
) para remover os espaços em branco finais dos arquivos:Execute esse script no diretório que você deseja verificar. No OSX no final, ele removerá todos os arquivos que terminam com
.bak
.Ou apenas:
recomendado pelo Spring Framework Code Style .
fonte
find . -type f -name "*.java" -exec perl -p -i -e "s/[ \t]$//g" {} \;
remove apenas um espaço à direita em vez de todos.Acabei não usando find e não criando arquivos de backup.
Dependendo da profundidade da árvore de arquivos, isso (versão mais curta) pode ser suficiente para suas necessidades.
NOTA: isso também leva arquivos binários, por exemplo.
fonte
Em vez de excluir arquivos, aqui está uma variação das listas brancas explicitamente acima, com base na extensão do arquivo que você deseja remover, sinta-se à vontade para temperar a gosto:
fonte
-name "*.rb*"
Acabei executando isso, que é uma mistura entre a versão pojo e adams.
Ele limpará o espaço em branco à direita e também outra forma de espaço em branco à direita, o retorno de carro:
Não tocará na pasta .git se houver uma.
Edit : Tornou um pouco mais seguro após o comentário, não permitindo levar arquivos com ".git" ou ".svn". Mas cuidado, ele vai tocar arquivos binários, se você tem algum. Use
-iname "*.py" -or -iname "*.php"
after-type f
se quiser apenas tocar em, por exemplo, arquivos .py e .php.Atualização 2 : agora substitui todos os tipos de espaços no final da linha (o que significa guias também)
fonte
Isso funciona bem. Adicione / remova --include para tipos de arquivos específicos:
fonte
Rubi:
fonte
Eu uso expressões regulares. 4 passos:
Isso remove todos os espaços finais no final de cada linha em todos os arquivos. E você pode excluir alguns arquivos que não se encaixam nessa necessidade.
fonte
1) Muitas outras respostas são usadas
-E
. Não sei por que, como essa é a opção de compatibilidade com BSD não documentada .-r
deve ser usado em seu lugar.2) Outras respostas são usadas
-i ''
. Isso deve ser justo-i
(ou-i''
se preferido), porque-i
tem o sufixo logo depois.3) Solução específica Git:
O primeiro registra um alias do git
check-whitespace
que lista os arquivos com espaços em branco à direita. O segundo é executadosed
sobre eles.Eu só uso,
\t
e não[:space:]
como normalmente não vejo guias verticais, feeds de formulário e espaços que não podem ser quebrados. Sua medida pode variar.fonte
Isto é o que funciona para mim (Mac OS X 10.8, GNU sed instalado pelo Homebrew):
Os espaços à direita removidos, substituem as guias por espaços, substituem o Windows CRLF pelo Unix
\n
.O interessante é que eu tenho que executar isso 3-4 vezes antes que todos os arquivos sejam corrigidos, com todas as
gsed
instruções de limpeza .fonte