Conozco tres métodos para eliminar todas las entradas de un archivo.
Son
>filenametouch filenamefilename < /dev/null
De estos tres abuso >filenamemá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 filenameno 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/nullintenta ejecutar el nombre del archivo/dev/nullcomo entrada.cp /dev/null filenametrabajos.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 filenameo> filenameambos están bien. Ambos abren y luego cierran el archivo, utilizando la configuración de truncar al abrir.cptambién se abre/dev/null, lo que lo hace marginalmente más lento.Por otro lado, es
truncateprobable que sea más lento que> filenamecuando se ejecuta desde un script, ya que ejecutar el comando truncar requiere que el sistema abra el ejecutable, lo cargue y lo ejecute.fuente
truncatees el más eficiente?> filenamemétodos necesitan llamar.truncate(2)no hace esotouch filename, ¿permanecerá el inodo igual (siempre que haya un archivo antes)?ls -iOtra 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 filenameun 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 bashdescribe 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.> filees suficiente para truncar un archivo. No necesita ningún comando, solo el operador de redirección.> filenameno funciona. por ejemplo, en zsh. Pero: > filenamefunciona aún.> myfilepero p. Ej. Errores csh con: Comando nulo inválido.