簡體   English   中英

查找不在數字列表中的文件

[英]Find files not in numerical list

我有一個龐大的文件列表,這些文件當前都以不同的文件擴展名按順序編號。

3400.PDF
3401.xls
3402.doc

目錄中大約有1400個這些文件。 我想知道的是如何找到序列中不存在的數字。

我試圖為此編寫一個bash腳本,但是我的bash-fu很弱。

我可以通過使用以下文件獲取不含擴展名的文件列表

FILES=$(ls -1 | sed -e 's/\\..*$//')

但是我見過的一些地方說不要以這種方式使用ls (問了15天后,如果有的話,我無法將其移到我閱讀的地方...)

我也可以通過ls | head -n 1獲得第一個文件ls | head -n 1 ls | head -n 1但我很確定我正在使這變得更加復雜,我需要這樣做。

聽起來您想做這樣的事情:

shopt -s nullglob
for i in {1..1400}; do 
    files=($i.*)
    (( ${#files[@]} > 0 )) || echo "no files beginning with $i"; 
done

這將使用一個glob來創建所有文件1.*2.*等的數組。然后將數組的長度與0進行比較。如果沒有與該模式匹配的文件,則會顯示該消息。

啟用nullglob非常重要,否則,當沒有文件匹配時,數組將包含一個元素:文字值'1.*'

根據已刪除的答案,基本上是正確的:

for i in $(seq 1 1400); do ls $i.* > /dev/null 2>&1 || echo $i; done
ls [0-9]* \
| awk -F. '  !seen[$1]++ { ++N }
             END         { for (n=1; N ; ++n) if (!seen[n]) print n; else --N }
'

當它填補了最后一個空白時停止, N>0 || n < 3000 N>0 || n < 3000至少可以走那么遠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM