2015-05-05 102 views
0

我有一個文件夾,有很多視頻和縮略圖的視頻。在Plex上觀看視頻後,我在Web界面上將其刪除。所以文件中的縮略圖保留在文件夾中。如何檢查與其他擴展名相同的文件是否在一個文件夾中

現在我想編寫一個程序,刪除所有的縮略圖,如果沒有相應的mp4文件。

這裏是從文件夾的 「LS」 的一個示例:

PietSmiet - BATTLEFIELD HARDLINE 1920x1080.jpg

PietSmiet - 城市地平線#45 1920x1080.jpg

PietSmiet - GTA ONLINE#89 1920x1080.jpg

PietSmiet - MEIN ARSCH BRICHT AUS 1920x1080.jpg

PietSmiet - MINECRAFT冒險地圖#92 1920x1080.jpg

PietSmiet - TTT#171 1920x1080.jpg

PietSmiet - TTT#171 1920x1080.mp4

+0

「我iwant到編寫程序「。告訴我們你試過的東西,S.O.不是免費的編程服務。祝你好運。 – shellter

+0

我試圖用「ls」來獲取文件名,然後刪除擴展名,所以我有一個列表中的所有文件名。 之後,我想檢查是否有兩個euqal文件並刪除其他文件。 –

回答

0

一種方法來解決,這將是過濾通過腳本進行排序名單這樣的:

  • 每個文件名,使其名稱的副本,修剪掉後綴
  • 比較,與修剪的名字從以前的修剪名線(忽略的第一行的情況下)
  • 如果兩者相等,報告兩個文件名
  • 保存當前文件名(和修整的文件名),用於下次比較

即可以有一些重複行 - 你可以在腳本中處理。但更簡單的是將結果通過uniq。此外,我會覆蓋語言環境POSIX擺脫有時奇怪的整理序列,可以等同於大寫/小寫(並使比較複雜)。

在POSIX外殼,這將是兩個腳本,例如,一個接受包含文件名列表的文件:

#!/bin/sh 
unset LANG 
unset LC_ALL 
unset LC_CTYPE 
sort $* | my-filter | uniq 

my-filter腳本:

#!/bin/sh 
last_file= 
last_trim= 
while : 
do 
    read this_file 
    [ -z "$this_file" ] && break 
    this_trim=$(echo "$this_file" | sed -e 's/\.[^.]*$//') 
    if [ "$this_trim" = "$last_trim" ] 
    then 
      echo "$last_file" 
      echo "$this_file" 
    fi 
    last_trim="$this_trim" 
    last_file="$this_file" 
done 
+0

所以我必須用你的第一個代碼和第二個名爲my-filter.sh的shell腳本命名爲start.sh。並啓動start.sh腳本? –

+0

是的 - 併爲'start.sh'提供一個包含您想要學習的文件名列表的文件的名稱。 –

相關問題