我有一個很少訪問的幾 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