我有一個包含大約 500k 子檔案夾的檔案夾 - 我想找到添加到此檔案夾中的最后一個目錄。由于電源故障問題,我不得不這樣做:(
我不完全知道電源何時發生故障,所以使用這個:
find . -type d -mmin -360 -print
我相信是最后 360 分鐘?但是,給了我我不確定的結果。
簡而言之,我想獲取在此檔案夾中創建的最后一個目錄。
任何指標都會很棒。
uj5u.com熱心網友回復:
建議:
find . -type d -printf "%C@ %p\n" |sort -n|tail -n1|awk '{print $2}'
解釋:
find . -type d -printf "%C@ %p\n"
find .從當前目錄開始遞回搜索
-type d僅搜索目錄檔案
-printf "%C@ %p\n"對于每個目錄,列印其從 Unix 紀元時間開始的最后一次更改時間(以秒為單位),包括秒分數,后跟檔案名和路徑。
例如:1648051886.4404644000 /tmp/mc-dudi
|sort -n|tail -n1
將 find 的結果排序為數字,并列印最后一行。
awk '{print $2}'
從最后一行開始,僅列印第二個欄位
uj5u.com熱心網友回復:
你可以試試這個:它以可排序的方式顯示你的最后修改日期/時間,通過排序,最后一個條目應該是最新的:
find ./ -exec ls -dils --time-style=long-iso {} \; | sort -k8,9
編輯:并且特定于目錄:
find ./ -type d -exec ls -dils --time-style=long-iso {} \; | sort -k8,9
uj5u.com熱心網友回復:
假設您使用的是跟蹤檔案創建(“出生”是常用術語)時間的檔案系統,以及以下使用的程式的 GNU 版本:
find . -type d -exec stat --printf '%W\t%n\0' \{\} | sort -z -k1,1nr | head -1 -z | cut -f 2-
這將找到當前作業目錄的所有子目錄,并為每個子目錄列印其出生時間(%W格式欄位stat(1))和名稱(%n格式)。然后根據時間戳對這些條目進行排序,最新的在前,第一行減去時間戳。
不幸的是,GNU find-printf不支持出生時間,因此它要求stat(1)使用多引數版本來獲取這些時間,-exec以最小化需要運行的程式實體的數量。剩下的就是對列進行直接排序,使用 0 位元組終止符而不是換行符來穩健地處理包含換行符或其他時髦字符的檔案名。
uj5u.com熱心網友回復:
維護指向最后一個已知子目錄的符號鏈接可以避免列出所有子目錄來查找最新的子目錄。
ls -dl $(readlink ~/tmp/last_dir)
drwxr-xr-x 2 lmc users 4096 Jan 13 13:20 /home/lmc/Documents/some_dir
尋找較新的
ls -ldt $(find -L . -newer ~/tmp/last_dir -type d ! -path .)
drwxr-xr-x 2 lmc users 6 Mar 1 00:00 ./dir2
drwxr-xr-x 2 lmc users 6 Feb 1 00:00 ./dir1
要么
ls -ldt $(find -L . -newer ~/tmp/last_dir -type d ! -path .) | head -n 1
drwxr-xr-x 2 lmc users 6 Mar 1 00:00 ./dir2
uj5u.com熱心網友回復:
如果您真的想找到最后創建的子目錄,請不要使用選擇的答案
根據問題:
- 目錄應該按創建時間而不是修改時間排序。
find --mindepth 1是必要的,因為我們只想搜索子目錄。
這里有 2 個解決方案都滿足 2 個要求:
GNU
find . -mindepth 1 -type d -exec stat -c '%W %n' '{}' ' ' |
sort -nr | head -n1
BSD
find . -mindepth 1 -type d -exec stat -f '%B %N' '{}' ' ' |
sort -nr | head -n1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448362.html
標籤:重击
