Osx

確定自上次以來目錄內容是否已更改的最快方法

  • December 5, 2017

我有一個使用 * 檢查目錄的腳本mdls(按添加時間排序),它們執行一些操作。但是,mdls它有點慢,所以我只想在絕對必要時執行它(即當目錄內容髮生變化時)。

我的想法是執行mdls一次並記憶體結果,執行一些操作來跟踪目錄的狀態。在隨後的執行中,我會再次執行檢查操作並將結果與我的結果進行比較。如果不同,請重新執行mdls;如果沒有,請使用記憶體。

我正在考慮du '/dir/path' | tail -1(如果目錄大小保持等於字節,則內容可能沒有改變)或ls '/dir/path' | md5'.

我目前更傾向於該md5解決方案,因為它對文件重命名具有彈性。但是,這兩種解決方案都很老套,我想知道是否有更有效的方法(仍然很快)。

如果有幫助,最終該解決方案將在 ruby​​ 腳本中使用。


*我不會將其發佈到Ask Different,因為mdls這不是重點。它可以是任何其他慢速命令。

如果檢查新/刪除文件(並忽略對現有文件的修改)就足夠了,您可以使用目錄本身的時間戳mtime

你可以得到它stat。這裡的輸出是自 1970 年初以來的秒數:

$ stat -f %m "$dir"      # stat on OS X
1512493220
$ stat -c %Y "$dir"      # GNU coreutils stat
1512493801
$ stat -c %.9Y "$dir"    # nanoseconds too
1512493801.802870731

如果要檢查對文件的修改,可以檢查它們的所有時間戳,並使案例如sort

$ stat -f %m "$dir"/* | sort -n | tail -1
1512428453

(這接近BashFAQ 003,主要是關於查找具有最新時間戳/最大大小/等的文件,但包含一些相當複雜的解決方案。)

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