Como 'ecoar' ”x 'em vários arquivos

5

Qual é a melhor maneira de esvaziar um monte de arquivos no bash? Até agora eu tenho feito isso

echo "" > development.log
echo "" > production.log

Eu realmente não quero excluir esses arquivos, então rm não é possível. Eu tentei muitas coisas como

echo "" > *.log

mas nada funcionou.

    
por Jakub Arnold 09.09.2009 / 17:12

6 respostas

7

Você não precisa do eco. Apenas

>filename

irá esvaziar o arquivo. Para editar o rassie ...

for FILE in *.log
do
   >"${FILE}"
done

As aspas e os colchetes são preferidos, pois eles manipularão corretamente os arquivos com espaços ou caracteres especiais.

    
por 09.09.2009 / 17:19
3

Apenas por diversão, outra variação combina o find de Eric Dennis com o redirecionamento de todos os outros:

find . -name "*.log" -exec sh -c ">{}" \;
    
por 09.09.2009 / 18:20
1
for i in *.log; do > $i; done

Observe que, se você realmente deseja que os arquivos sejam esvaziados, use sem eco em todos , veja acima ou passe o sinalizador -n para echo ( echo -n )

    
por 09.09.2009 / 17:21
0

Um loop pode fazer:

for i in *.log; do echo "" > $i; done
    
por 09.09.2009 / 17:15
0
for i in *.log; do cp /dev/null $i; done

Ou, se você quiser recorrer:

find . -name "*.log" -exec cp /dev/null {} \;
    
por 09.09.2009 / 17:50
-1

Isso também funcionará.

find *.txt | awk '{print " " > $1}'
    
por 27.03.2018 / 15:29