Ls

SCRIPT 中的哪個命令會導致下一個“ls”立即列出文件?

  • August 22, 2020

概括

我可以在 bash 腳本中執行什麼命令,使ls終端的下一個命令立即列出目錄中的文件,而不必等待 10 秒?

請參閱“詳細資訊”末尾的問題 1 和 2。

詳細資訊

我在一個目錄中有 700 個影片文件 (mp4),大小從 100 MB 到 1GB 不等。平均文件大小為 200 MB。

當我在啟動後第一次列出它們時(在終端中使用 ls 或使用 pcmanfm),需要 10 秒才能列出文件。此後,當我再次列出它們(使用 ls 或在 pcmanfm 中)時,幾乎立即列出了這些文件。

因此,為了嘗試繞過這個初始等待時間,我在啟動後在腳本中執行了以下命令:

ls /path/to/vid-directory

…因此,此後,當我使用 ls 或在 pcmanfm 中列出目錄時,文件會立即列出。

但奇怪的是,跑步

ls /path/to/vid-directory

在 SCRIPT 中不會導致 NEXT ls 或 pcmanfm 立即列出文件(它們在 10 秒後列出)。同樣奇怪的是,當初始腳本執行時,文件幾乎立即列出。

因此,在終端執行 ls 似乎會將文件名儲存在 RAM 記憶體中,而在腳本中執行 ls 則不會*。

**問題 1:*為什麼會發生後者

**問題 2:**我應該在我的腳本中執行哪些命令會導致下一個 ls 或 pcmanfm 立即列出文件?

PS:在進行測試時,我通過執行確保 RAM 最初是空的

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

ls終端和腳本之間唯一可能的區別ls是,您使用別名ls傳遞了一個選項,該選項不僅需要讀取文件名列表,還需要讀取文件的屬性。選項可能是--color. 讀取文件名列表只需要從目錄本身讀取,而讀取文件的屬性需要訪問每個單獨文件的 inode(使用lstat系統呼叫)。因此,當您ls在該腳本中執行時,只有文件名最終會出現在記憶體中,而不是它們的屬性。第一次ls在終端執行或使用 GUI 文件管理器時,需要載入屬性。

將相同的選項傳遞到ls您在終端上使用的腳本中。

10 秒只列出 700 個文件雖然異常緩慢。文件的大小無關緊要。典型的現代系統只有在處理數万或數十萬個文件時才開始變得明顯變慢,如果不是更多的話。

引用自:https://unix.stackexchange.com/questions/602280