![列出模式中缺少的檔名](https://rvso.com/image/109253/%E5%88%97%E5%87%BA%E6%A8%A1%E5%BC%8F%E4%B8%AD%E7%BC%BA%E5%B0%91%E7%9A%84%E6%AA%94%E5%90%8D.png)
我有很多以數字開頭然後用說明連字符連接的文件。例如:
001 - awesomesauce 216 - stillawesomesauce
它們按子目錄組織
那麼,我將如何使用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
我寫findmissing
Python 腳本就是這樣做的。我在 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