Pregunta ¿Cómo borrar el contenido de un archivo de la línea de comando?


Tengo un archivo de registro que tiene 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 a una por vez. ¿Hay alguna manera de hacerlo en un comando sin destruir el archivo para hacerlo?


227


origen




Respuestas:


En bash, solo

> filename

va a hacer

Esto te dejará con un archivo vacío nombre del archivo.

PD.

Si necesitas sudo llamada, considere usar truncate como respondió aquí.


389



Este es probablemente el comando más radical en la historia de la informática - blarg
Por el contrario, @ Arekkusandaa.Irujasukin; funciona bien en cualquier versión de Windows, siempre y cuando, como se mencionó, usted esté usando bash como tu caparazón y no e. gramo. cmd.exe o PowerShell, ninguno de los cuales es POSIX suficiente para poder manejar tales cosas. - DopeGhoti


Puede usar el comando de usuario: truncar

truncate -s 0 test.txt

("-s 0" para especificar el tamaño)

http://www.commandlinefu.com/commands/view/12/empty-a-file


79



La mejor respuesta, funciona cuando no eres root (con sudo) - sudo echo > file simplemente da un error en tales casos. - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' es cómo usas las soluciones Bash con sudo. - Stuart P. Bentley
brew install truncate en os x con homebrew instalado. - xaxxon


Podrías hacer esto:

echo -n "" > file.log

Utilizando > para escribir la entrada (nula) de echo -n al archivo.

Utilizando >> haría adjuntar la entrada nula al archivo (efectivamente no haciendo nada más que touching it).


32



Esto dejará un espacio allí. - dmckee
Estoy obteniendo esto: -bash:: comando no encontrado - Andrew
echo ""> aún le dará un archivo con un carácter (una línea nueva). Si desea usar el eco, use "echo -n> file.log" para hacer eco nulo. - Dave Forgac
Sería mejor usar un comando dedicado de salida nula como true (o su alias incorporado :), aunque en última instancia no necesitas ningún comando (ver la respuesta aceptada). - Stuart P. Bentley
trabajando bien con Mac, gracias - AMIC MING


: > file.log

Igual que > filename en Bash, pero funciona en más conchas (crédito). Redirige la salida de la true incorporado (que no tiene salida) a filename.


22



Vine a hacer esta respuesta, pero, por desgracia, ya está aquí ... Tome un voto positivo. - Aaron Hall
Solo haz :> filename. ¿No se ve como un emoticón? :> - minmaxavg


ZSH

>! filename

ZSH protegerá a los usuarios contra los archivos de clobber utilizando el operador de redirección io >. Si utiliza >! puede forzar el truncamiento de un archivo existente.

Si quieres que ZSH use el comportamiento de redirección de Bash, si no hay protección contra el ataque de archivos, entonces debes configurar el clobber opción para tu caparazón.

Más información: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9





SI quiere hacer desde dentro de un editor de vim en línea de comandos, puede intentar esto:

vim file.txt 

prensa Esc.

:1,$d

prensa Entrar.

Encontrará todas las líneas borradas.


7



Esto es lo único que funcionó para mi maillogincluso sudo > /var/log/maillog no lo borrará (permiso denegado) - bobobobo
@bobobobo No funciona como sudo > /var/log/maillog significa: ejecute sudo y coloque su salida en el archivo. Obviamente pone salida con permisos de usuario actuales. Lo más fácil hacer sudo su para iniciar el shell de la raíz y luego hacer > /var/log/maillog. - kan


$ rm file.log; touch file.log

o

$ cat > file.log

seguido por control-d.

o ... o ... o ...

Ah. Aquí hay una versión de comando único:

$ dd if=/dev/null of=file.log

4



La sugerencia de Thechickenmoo de echo "" > file.log es mejor que el cat opción que muestra, en esta situación, aunque hay otros donde cat es mas apropiado ambos usan la misma redirección de caparazón para hacer el trabajo pesado. - quack quixote
No necesitas ejecutar el comando cat. Solo "> file.log" lo hará. - camh
Al eliminar el archivo se restablecerá la fecha de creación. - Matteo
Al eliminar el archivo, los programas que miran ese archivo pierden su puntero (es decir, tendrá una nueva dirección en el sistema de archivos). En términos generales, sí rm realizará la tarea de producir un archivo vacío con el mismo nombre. Pero no va a ser adecuado para cada caso de uso. - robert


El comando Below también debería funcionar:

cat /dev/null > file.log

4





Si necesita sudo al privilegio de superusuario para acceder al archivo, la respuesta aceptada no funcionará. Usar esto funciona:

truncate -s0 file

o explícitamente con sudo:

sudo truncate -s0 file

Más información aquí http://www.commandlinefu.com/commands/view/12/empty-a-file


1





Una línea a la vez?

Pruebe vi (m), el encantador editor de texto que puede hacer cualquier cosa. En este caso, navegue a una línea, presione d (para borrar) y d nuevamente (para línea).


0



Si desea deshacerse de todo el archivo en vim, con el cursor en la parte superior del documento, al escribir d G (eso es d, luego shift-G) se eliminará todo el archivo (d para eliminar, G para el final del archivo). Sin embargo, prefiero tu método (me da más tiempo para pensar si REALMENTE quiero borrar el archivo). - Babu
@Babu gg se mueve hacia arriba para que toda la secuencia pueda ser ggdG. - Bob


Con mis permisos, esto es lo único que funcionó:

touch temp.txt
sudo mv temp.txt original-file.txt

0