依存取時間遞歸排序的清單檔案+目錄路徑

依存取時間遞歸排序的清單檔案+目錄路徑

我正在編寫一個 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 選項,則僅在修改後的第一次訪問時修改訪問時間戳;因此,最近最少使用的檢查並不可靠。 (然而,最近最少修改的清單是相當可靠的;使用者可以手動修改時間戳,但否則它們會自動維護。)noatimerelatime

  • sort對輸出進行排序。

    -d、、和選項定義如何比較項目,並且該-g選項使順序隨機。-h-M-n-R

    -r選項可用於反轉排序順序(除了上述選項之一之外使用)。

    -t選項重新定義了欄位(列)的定義方式;預設情況下,空格(空格和製表符)分隔列。

    -k選項可用於定義每行的哪一部分被視為排序鍵;預設情況下,考慮整行。

  • uniq通常在排序後使用,將多個連續的項目合併為一個-以便僅輸出唯一的行。

  • cut是從輸出中的每一行中僅選擇特定列的最簡單方法。

    -f選項選擇要列印的欄位。 (預設情況下,列印最多包含一個欄位(無分隔符號)的行;此選項-s禁止列印此類行。)

    -d選項可用於重新定義欄位的定義;預設情況下,將單獨的欄位留空。

  • sed是一個強大的串流編輯器,適用於常用表達對輸入進行過濾並根據需要進行修改。

  • awk是 awk 語言的解釋器。 awk 腳本基本上是以下集合行動,為每一行執行的程式碼片段(或在所有處理之前或之後,或如果該行(或記錄)符合某些規則)。

這個特殊問題可以在一個簡單的管道中使用上述三個命令來解決:使用find在樹的所需深度查找文件,列印每個文件的可排序日期和時間,以及文件的相對路徑;對輸出進行排序;刪除每行的日期和時間部分,僅保留每行上每個檔案的相對路徑。

答案2

到目前為止最簡單的方法是使用桀騁。它是全域限定符可以根據文件的類型、時間戳記和其他屬性對文件進行比對和排序。

print -lr -- *(.Doa)
print -lr -- **/*(.Doa)

.第一個指令列印目前目錄中常規檔案 ( ) 的名稱,包括D按存取時間 ( ) 排序的點檔案 ( oa)。第二個指令遞歸地列出目前目錄及其子目錄中的檔案。

相關內容