我有一个很少访问的几 GB 目录,但是当它被访问时,我希望能够快速读取其中的文件,而不必等待。由于这些文件很少被访问,因此它们不会位于文件系统缓存中,但我建议 Linux 在我访问它们之前将它们预加载到文件系统缓存中。
有些人可能会争辩说,我需要等待它第一次加载它们,所以我没有节省任何时间——足以说,在我的特定用例中,我可以自动执行此操作,所以这不是保存的问题系统时间,这是节省用户时间的问题(因为如果文件被缓存,他们不需要等待)。
我还意识到,如果不使用 tmpfs 之类的东西,文件系统缓存就不能得到保证,它是对操作系统的建议,我对此很满意。
所以看起来显而易见的方法是:
tar -cf - /mydirectory > /dev/null
然而,当我这样做时,命令会立即返回,即使对于几个 GB 的目录也是如此。 bash 似乎发现输出被定向到 /dev/null 并优化了整个命令,因此 tar 实际上甚至没有从该目录中读取。
让操作系统读取目录中所有文件的简单命令是什么?
答案1
进行此优化的不是 bash,而是 GNU tar。它可以识别其输出何时读取文件内容/dev/null
以及何时不读取文件内容。
要么安排输出不为/dev/null
:
tar -cf - /mydirectory > /dev/zero
或者使用不同的工具,例如
find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null