
我有一大堆帶有名稱的文件列表(視頻)
我設法將所有文件名寫入一個文字檔。現在我有一個包含很多文件名的文本文件(每行一集)現在我需要一些可以讀取該文本文件並告訴我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-E2
和S10-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
準備一個包含所有劇集簽名的檔案。您沒有告訴我們每季有多少集,但您顯然需要知道。這是準備文件的方法:
>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
。以相同的形式建立擁有的劇集檔案:
cut -d - -f -2 your_current_list >owned_episodes
該命令
-
作為delimiter 並返回行片段直到F目前清單中的第 2 號欄位。視為
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>
匹配整個固定字串或正規表示式的輸入行作為匹配行。