Tengo un directorio de varios GB al que rara vez se accede, pero cuando lo esté, me gustaría poder leer los archivos que contiene rápidamente en lugar de tener que esperar. Dado que rara vez se accede a los archivos, no estarán en la memoria caché del sistema de archivos, pero me gustaría sugerir que Linux los cargue previamente en la memoria caché del sistema de archivos antes de acceder a ellos.
Algunos pueden argumentar que tendré que esperar a que los cargue la primera vez, por lo que no ahorraré tiempo; basta decir que en mi caso de uso particular puedo automatizar esto, por lo que no es cuestión de guardar. tiempo del sistema, es una cuestión de ahorrar tiempo al usuario (ya que no necesita esperar si los archivos están en caché).
También me doy cuenta de que el caché del sistema de archivos no es una garantía sin usar algo como tmpfs, es una sugerencia para el sistema operativo y estoy de acuerdo con esto.
Entonces parece que el método obvio sería hacer:
tar -cf - /mydirectory > /dev/null
Sin embargo, cuando hago esto, el comando regresa inmediatamente, incluso para un directorio de varios GB. Parece que bash ve que la salida se dirige a /dev/null y optimiza todo el comando, por lo que tar ni siquiera lee del directorio.
¿Qué es un comando simple para hacer que el sistema operativo lea todos los archivos en un directorio?
Respuesta1
No es bash el que hace esta optimización, es GNU tar. Reconoce cuándo es su salida /dev/null
y no lee el contenido de los archivos.
O haga arreglos para que la salida no sea /dev/null
:
tar -cf - /mydirectory > /dev/zero
O utilice una herramienta diferente, como
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null