列出模式中缺少的檔名

列出模式中缺少的檔名
  1. 我有很多以數字開頭然後用說明連字符連接的文件。例如:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. 它們按子目錄組織

那麼,我將如何使用bash腳本或這些目錄中的一些內建來查看是否按順序丟失了某個數字?即報告我在上面的範例中缺少002、等。128我知道我可以ls {000..216}\ -*,它會列出文件,如果找不到它會拋出錯誤,但是有沒有更好的方法來獲取丟失的文件並遞歸執行?

答案1

gnu設定上你可以運行:

myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})

或者,使用zsh,您可以嘗試這樣的操作:

myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}

它從每個文件名中提取數字(前三位),對它們進行排序並將結果保存在數組中 - myarr。然後它設定另一個陣列 -mynums包含從001最後一個索引的值開始的數字(即從檔案名稱中提取的最大數字),然後使用參數擴充myarr從 的擴充中刪除 中的值mynums

答案2

我寫findmissingPython 腳本就是這樣做的。我在 macOS 上開發了它,但它應該可以在任何平台上運行。我測試了使用 Python 2.7 和 3.6 運行它。

這是我的腳本的實際效果:

$ cat sampleFile.txt | python findmissing.py -p "DSC003\.(\d+)"
12
13
14
16
17
18
22
23
24

...提供以下文件時輸出:

Id                                  Name         Type   Size     Created
1Dgt5ZFKT3zilwPZdiPyPmhM0Y3Fz_xo8   DSC003.010   bin    1.1 GB   2018-06-12 16:57:14
16QPadXBXPGIwiRhzMFRuY7tZkdIlJ1DI   DSC003.011   bin    1.1 GB   2018-06-12 16:54:57
1zD492J3F42Azeoct82DMlXRRuWA8AUiY   DSC003.015   bin    1.1 GB   2018-06-12 17:32:12
1bah8OM_F49BNeoct8M2DlXRRuOD8AUiY   DSC003.019   bin    1.1 GB   2018-06-12 17:24:41
1eZfY4qn3Ol6w1BFafQn6YDy1uOU82NNA   DSC003.020   bin    1.1 GB   2018-06-12 17:21:46
1x-P84Jq1cyuJCW2Opvy4m_qOjOHvAKtA   DSC003.021   bin    1.1 GB   2018-06-12 17:27:16
1O4TjR8Cl31A5qxHkyVmhmukp4dofCO3t   DSC003.025   bin    1.1 GB   2018-06-12 17:36:00

相關內容