我正在編寫一個 LRU 腳本,但在處理了 20 個小時後,我遇到了無法修復的遞歸模式問題。
我只需要一個命令來顯示按訪問時間排序的文件(--time=atime);我也想控制深度,但如果我做不到,也沒關係。
- 主目錄:
- 文件1
- 目錄1:
- 文件1
- 文件2
- 子目錄 1 :
- 文件1
- 文件2
- 目錄2:
- 文件1
- 文件2
- 子目錄 2 :
- 文件1
- 文件2
- 子目錄 3 :
- 文件1
我想排除目錄,只讓文件按訪問時間排序
喜歡
/主目錄/目錄1/檔案1
/主目錄/檔案1
/主目錄/目錄1/子目錄1/檔案2
/主目錄/目錄 2/子目錄 2/子目錄 3/檔案 1
ETC..
答案1
有六種非常常用的工具可以解決類似的問題:
find
,尋找與特定條目相符的檔案或目錄。-mindepth
和選項-maxdepth
控制命令在檔案系統樹中的深度(相對於指定的名稱,其深度始終為 0)。此
-type
選項對於限制對檔案、目錄、符號連結或裝置的考慮很有用。此
-printf
選項非常有用,因為它使命令以所需的格式列印有關符合名稱(目錄項目)的資訊。我特別喜歡%TY%Tm%Td %TT %p\n
,它使用 format 列印最後一次修改的日期和時間,以及每行上每個匹配的完整路徑和名稱YYYYMMDD HH:MM:SS.sss PATH
。您會看到,這種格式排序正確。對於最後一次訪問,使用,但請注意,如果使用 mount 選項,則%AY%Am%Ad %AT %p\n
根本不會記錄訪問時間戳,或者如果使用 mount 選項,則僅在修改後的第一次訪問時修改訪問時間戳;因此,最近最少使用的檢查並不可靠。 (然而,最近最少修改的清單是相當可靠的;使用者可以手動修改時間戳,但否則它們會自動維護。)noatime
relatime
sort
對輸出進行排序。、
-d
、、和選項定義如何比較項目,並且該-g
選項使順序隨機。-h
-M
-n
-R
此
-r
選項可用於反轉排序順序(除了上述選項之一之外使用)。此
-t
選項重新定義了欄位(列)的定義方式;預設情況下,空格(空格和製表符)分隔列。此
-k
選項可用於定義每行的哪一部分被視為排序鍵;預設情況下,考慮整行。uniq
通常在排序後使用,將多個連續的項目合併為一個-以便僅輸出唯一的行。cut
是從輸出中的每一行中僅選擇特定列的最簡單方法。此
-f
選項選擇要列印的欄位。 (預設情況下,列印最多包含一個欄位(無分隔符號)的行;此選項-s
禁止列印此類行。)此
-d
選項可用於重新定義欄位的定義;預設情況下,將單獨的欄位留空。awk
是 awk 語言的解釋器。 awk 腳本基本上是以下集合行動,為每一行執行的程式碼片段(或在所有處理之前或之後,或如果該行(或記錄)符合某些規則)。
這個特殊問題可以在一個簡單的管道中使用上述三個命令來解決:使用find
在樹的所需深度查找文件,列印每個文件的可排序日期和時間,以及文件的相對路徑;對輸出進行排序;刪除每行的日期和時間部分,僅保留每行上每個檔案的相對路徑。