Tengo un archivo de registro que contiene un montón de cosas que ya no necesito. Quiero borrar el contenido.
Sé cómo imprimir los contenidos en la pantalla:
cat file.log
Sé cómo editar el archivo, línea por línea:
nano file.log
Pero no quiero eliminar cada línea de una en una. ¿Hay alguna manera de hacerlo en un comando sin destruir el archivo para hacerlo?
linux
command-line
Andrés
fuente
fuente
bash
como su shell y no, por ejemplo,cmd.exe
o PowerShell, ninguno de los cuales es lo suficientemente POSIXy como para esperar que maneje tales cosas.Puede usar el comando de usuario: truncar
("-s 0" para especificar el tamaño)
http://www.commandlinefu.com/commands/view/12/empty-a-file
fuente
sudo echo > file
solo da un error en tales casos.sudo bash -c '> filename'
es como usas las soluciones Bash con sudo.brew install truncate
en os x con homebrew instalado.Podrías hacer esto:
Utilizando
>
para escribir la entrada (nula)echo -n
del archivo.El uso agregaría la entrada nula al archivo (efectivamente, no
>>
haría nada más que introducirlo ).touch
fuente
true
(o su alias incorporado:
), aunque en última instancia no necesita ningún comando (consulte la respuesta aceptada).sudo
.Igual que
> filename
en Bash, pero funciona en más shells (crédito) . Redirige la salida desde eltrue
incorporado (que no tiene salida) afilename
.fuente
:> filename
. ¿No parece un smiley? :>ZSH
ZSH protegerá a los usuarios de archivos de clobbering utilizando el operador de redireccionamiento io
>
. Si lo usa>!
, puede forzar el truncamiento de un archivo existente.Si desea que ZSH use el comportamiento de redireccionamiento de Bash, si no hay protección contra el golpeteo de archivos, debe configurar la
clobber
opción para su shell.Más información: http://zsh.sourceforge.net/Doc/Release/Redirection.html
fuente
Si desea hacerlo desde un editor vim en la línea de comandos, puede intentar esto:
Presione Esc.
Presione Enter.
Encontrará todas las líneas eliminadas.
fuente
maillog
, inclusosudo > /var/log/maillog
no lo despejaría (permiso denegado)sudo > /var/log/maillog
medio: ejecuta sudo y coloca su salida en el archivo. Obviamente, pone salida con permisos de usuario actuales. Lo más fácil essudo su
iniciar root shell y luego hacerlo> /var/log/maillog
.o
seguido de
control-d
.o ... o ... o ...
Ah Aquí hay una versión de comando único:
fuente
echo "" > file.log
es mejor que lacat
opción que muestra, en esta situación, aunque hay otros dondecat
es más apropiado. ambos usan la misma redirección de shell para hacer el trabajo pesado.rm
logrará la tarea de producir un archivo vacío con el mismo nombre. Pero no va a ser adecuado para todos los casos de uso.El siguiente comando también debería funcionar:
fuente
Si necesita sudo al privilegio de superusuario para acceder al archivo, la respuesta aceptada no funcionará. Usar esto funciona:
o explícitamente con sudo:
Más información aquí http://www.commandlinefu.com/commands/view/12/empty-a-file
fuente
Pocas alternativas:
fuente
Si tiene espacios en los nombres de archivo, use:
(No pude incluirlo en los comentarios a la respuesta anterior porque no tengo 50 reputación. A veces las limitaciones son contraproducentes).
fuente
¿Una línea a la vez?
Pruebe vi (m), el encantador editor de texto que puede hacer cualquier cosa. En este caso, navegue hasta una línea, presione d (para eliminar) y d nuevamente (para la línea).
fuente
gg
mueve a la parte superior para que pueda ser toda la secuenciaggdG
.Con mis permisos, esto es lo único que funcionó:
fuente
Además, si tiene varios archivos, puede usar lo siguiente:
Esto es útil para los archivos de registro en el mismo directorio.
fuente
> a.txt
Igual que> filename en Bash, pero funciona en más shells (crédito). Redirige la salida del verdadero archivo incorporado (que no tiene salida) al nombre de archivo.
fuente