Tenho um arquivo chamado error.log em meu servidor que preciso truncar com frequência. Eu tenho permissões rw para o arquivo. Abrir o arquivo no vi> deletar todo o conteúdo> salvar funciona (obviamente). Mas quando eu tento o abaixo
cat /dev/null > error.log
Eu entendi a mensagem
File already exists.
Obviamente, há algum tipo de configuração feita no servidor para evitar a substituição acidental de arquivos. Alguém pode dizer como faço para "truncar" o arquivo em um único comando?
linux
file
command-line
Sumeet Pareek
fonte
fonte
Respostas:
Você tem a
noclobber
opção definida. O erro parece ser de csh, então você deve fazer:Se eu estiver errado e você estiver usando o bash, faça o seguinte:
no bash, você também pode encurtar para:
fonte
File exists
erro semelhante, enquanto bash dá umcannot overwrite existing file
erro muito diferente .>file
não funciona.> file
e>| file
?noclobber
opção definida, tentar redirecionar para um arquivo existente falhará. Para substituir o redirecionamento específico enquanto deixa o noclobber ativado, você pode usar>|
Você também pode usar a função truncate
se a permissão for negada, use sudo
Ajuda / manual: homem truncado
testado em ubuntu Linux
fonte
Isso será o suficiente para definir o tamanho do arquivo como 0:
fonte
o crédito vai para meu colega sênior por isso:
Isso não vai quebrar os arquivos de log, então você pode até mesmo usá-lo no syslog, por exemplo.
fonte
:
é um comando sem efeito (quase um comentário), então>
é um redirecionamento como de costume, portanto, apenas redireciona a falta de saída de um comando que não faz nada no arquivo. Se noclobber estiver habilitado, você precisa:>| filename
(bash) (e presumo:>! filename
em csh assumindo que csh tem:
).pode funcionar bem
fonte
dd
a saída de nada seria ainda melhor do que a leitura simplesfalse
?Como o sudo não funciona com redirecionamento
>
, gosto dotee
comando para esse propósitofonte
error.log
, se ele já for gravável, não há necessidade de sudo. Acho que o outro problema é que você está passando o comando como um argumento de string parash
, não sei como isso é tratado internamente, mas essa é outra camada de complexidade / redirecionamento adicionadaecho ""
adicionará uma nova linha. Você pode usarecho -n ""
para suprimir a nova linhaQualquer um pode tentar este comando para truncar qualquer arquivo no sistema linux
Isso certamente funcionará em qualquer formato:
fonte
Eu gosto disso:
cp /dev/null file
fonte
Você também pode tentar:
echo -n > /my/file
fonte
noclobber
e pergunte a si mesmo se sua resposta faz algum sentido.