尋找缺少的號碼

尋找缺少的號碼

我有一大堆帶有名稱的文件列表(視頻)

我設法將所有文件名寫入一個文字檔。現在我有一個包含很多文件名的文本文件(每行一集)現在我需要一些可以讀取該文本文件並告訴我E缺少的集數的東西

S1-E18-(Date)-(Title)-(Random numbers).mp4

這是一個清單的範例

S1-E1-20100526-title-of-video-1400316375.mp4
S1-E3-20100517-title-of-video-15457547.mp4
S10-E5-20100421-title-of-video-14467457.mp4
S5-E7-20120912-title-of-video-17467457.mp4

在這種情況下,很容易看出文件S1-E2S10-E4遺失了。但如果我有一個很大的列表,那麼我怎麼才能找到丟失的文件。 (留下季數S1, S2)只需檢查E意味著劇集數

最大的現有文件的編號是S50-E2184最小的現有文件的編號是S1-E1

答案1

將所有名稱保存在名為“file_with_list_of_files”的檔案中,並在 linux/unix 終端機中執行以下命令[我在 mac 終端機中嘗試過]:

cat file_with_list_of_files | sed 's/^[A-Z][0-9]*-//g' | grep -v "^E"

- 或者 -

cat file_with_list_of_files | awk -F- '{print $2}' | grep -v "^E"

這列出了所有文件名在第一個 -(連字符)之後沒有 E。您也可能會找到其他更好的方法來做到這一點。

答案2

  1. 準備一個包含所有劇集簽名的檔案。您沒有告訴我們每季有多少集,但您顯然需要知道。這是準備文件的方法:

    >all_episodes   # just to empty the file which may or may not exist
    printf 'S1-E%s\n'  {1..3}    >>all_episodes   # 3 episodes in season 1
    printf 'S2-E%s\n'  {1..5}    >>all_episodes   # 5 episodes in season 2
    printf 'S3-E%s\n'  {1..8}    >>all_episodes
    # and so on
    printf 'S50-E%s\n' {1..2184} >>all_episodes
    

    這假設每個季節都有自己的第一集(您的問題不清楚)。該文件由表格中的行組成S<n>-E<m>,例如S2-E3

  2. 以相同的形式建立擁有的劇集檔案:

    cut -d - -f -2 your_current_list >owned_episodes
    

    該命令-作為delimiter 並返回行片段直到F目前清單中的第 2 號欄位。

  3. 視為owned_episodes模式並過濾all_episodes以查找沒有任何模式的行:

    grep -vxFf owned_episodes all_episodes
    

    注意我們-x在這裡使用;重點是S50-E3不應該匹配S50-E31-F在你的情況下沒有必要,但是一般來說人們應該在提供固定字串時使用它。這選項是:

    -F
    使用固定字串進行匹配。將指定的每個模式視為字串而不是正規表示式。 [...]

    -f pattern_file
    從以 pathname 命名的檔案讀取一種或多種模式pattern_file。 [...]

    -v
    選擇與任何指定模式都不相符的行。 [...]

    -x
    僅考慮使用行中除終止符之外的所有字元來<newline>匹配整個固定字串或正規表示式的輸入行作為匹配行。

相關內容