Tente o seguinte:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Se você quiser quatro espaços, tente:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Eu tenho muitos arquivos com guias espalhadas por toda parte e gostaria de convertê-los em espaços. Eu sei sobre o comando expand
, mas infelizmente eu teria que digitar todos os arquivos usando-o. Existe alguma maneira mais fácil de fazer isso no Linux?
Tente o seguinte:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Se você quiser quatro espaços, tente:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Existem muitas maneiras de fazer isso. Há também muitas maneiras de se fotografar no próprio pé ao fazer isso, se você não for cuidadoso ou se for novo no Linux como você parece ser. Supondo que você possa criar uma lista de arquivos que você deseja converter, seja usando algo como find
ou manualmente com um editor, apenas envie essa lista para o seguinte.
while read file
do
expand "$file" > /tmp/expandtmp
mv /tmp/expandtmp "$file"
done
Uma maneira de você se atirar no pé com isso é fazer um erro de digitação, de modo que você acabe com um arquivo vazio em todos os nomes de arquivo que você especificar, desse modo, excluindo o conteúdo de todos os seus arquivos. Portanto, tenha cuidado e teste o que você fizer primeiro em um pequeno conjunto de arquivos do qual fez backup.
find . -type f -iname "*.js" -print0 | xargs -0 -I foo tab2space foo foo
-I foo
cria uma variável de template foo para cada linha de entrada, então você pode se referir à entrada mais de uma vez.
-print0
e -0
informam ambos os comandos para usar \ 0 como um separador de linha em vez de SPACE, portanto, esse comando funciona para caminhos com espaços.
find -name \*.js -exec bash -c 'expand -t 4 "$0" | tee "$0"' {} \;
Contras:
arquivos maiores que o tamanho do buffer de canal ( 64KB ) são truncados
Prós:
sem arquivos temporários
arquivos maiores que o tamanho do buffer do pipe são truncados
Isso é melhor:
find . -name *.java ! -type d -exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;
Eu dei a este problema uma chance com os seguintes requisitos em mente:
O último requisito foi o mais difícil de ser cumprido porque "expandir" não permite modificar os arquivos no lugar.
Eu criei a seguinte solução:
find . -type f -regextype egrep -regex '.*\.(c|cpp|h|hpp)' -print0 | xargs -0 -n 1 -P 10 -IFILE bash -c ' ( echo "Processing FILE..." && expand -t 4 "FILE" > /tmp/expand.$$ && mv /tmp/expand.$$ "FILE" ) || exit 255'
Aqui está uma explicação:
Tags linux text-editing