Conozco tres métodos para eliminar todas las entradas de un archivo.
Son
>filename
touch filename
filename < /dev/null
De estos tres abuso >filename
más, ya que requiere la menor cantidad de pulsaciones de teclas.
Sin embargo, me gustaría saber cuál es el más eficiente de los tres (si hay algún método más eficiente) con respecto a los archivos de registro grandes y los archivos pequeños.
Además, ¿cómo funcionan y eliminan los tres códigos los contenidos?
shell-script
files
debatir
fuente
fuente
truncate -s 0 filename
?Respuestas:
En realidad, el segundo formulario
touch filename
no elimina nada del archivo: solo crea un archivo vacío si no existía o actualiza la fecha de la última modificación de un archivo existente.Y el tercero
filename < /dev/null
intenta ejecutar el nombre del archivo/dev/null
como entrada.cp /dev/null filename
trabajos.En cuanto a eficiente, lo más eficiente sería
truncate -s 0 filename
; ver aquí: http://linux.die.net/man/1/truncate .De lo contrario,
cp /dev/null filename
o> filename
ambos están bien. Ambos abren y luego cierran el archivo, utilizando la configuración de truncar al abrir.cp
también se abre/dev/null
, lo que lo hace marginalmente más lento.Por otro lado, es
truncate
probable que sea más lento que> filename
cuando se ejecuta desde un script, ya que ejecutar el comando truncar requiere que el sistema abra el ejecutable, lo cargue y lo ejecute.fuente
truncate
es el más eficiente?> filename
métodos necesitan llamar.truncate(2)
no hace esotouch filename
, ¿permanecerá el inodo igual (siempre que haya un archivo antes)?ls -i
Otra opción podría ser:
Desde la página del manual de
echo
:fuente
Hay un comando incorporado ":", que está disponible en sh, csh, bash y otros quizás, que puede usarse fácilmente con el operador de salida de redireccionamiento
>
truncar un archivo:Lo que me gusta de esto es que no necesita ningún comando externo como "echo", etc.
Una gran ventaja de truncar archivos en lugar de eliminarlos / recrearlos es que ejecutar aplicaciones que funcionan con este archivo (por ejemplo, alguien crea
tail -f filename
un software de monitoreo o ...) no tiene que volver a abrirlo. Simplemente pueden continuar usando el descriptor de archivo y obtener todos los datos nuevos.fuente
man bash
describe que la:
concha incorporada no tiene ningún efecto.>
al archivo, que crea el archivo si no existe, y si existe, lo trunca a cero. Mejor dicho: usa el:
para no hacer nada, y usa>
para redirigir nada a un archivo y truncarlo.> file
es suficiente para truncar un archivo. No necesita ningún comando, solo el operador de redirección.> filename
no funciona. por ejemplo, en zsh. Pero: > filename
funciona aún.> myfile
pero p. Ej. Errores csh con: Comando nulo inválido.