2010-10-18 80 views
4

我在Linux上使用Banshee,我讓它在文件夾層次結構中自動整理我的音樂收藏。當我將新專輯添加到我的音樂文件夾時,Banshee會自動移動(並重新命名)mp3並將其放入正確的Artist文件夾。如果文件夾中沒有其他文件,則該文件夾也會被刪除,但是如果存在其他文件,則只會移動mp3並保留該文件夾。因此,我的音樂文件夾中有許多文件夾不包含mp3,只包含圖像文件或類似的輔助文件。終端 - 刪除所有不屬於.mp3文件夾的文件

我將如何去除任何沒有mp3文件的文件夾(在音樂文件夾內)?

例如,假設我有以下:

/home/user/Music/ 

和我添加「相冊1(2010)」,其具有MP3和也封面的文件夾。女妖將拉出的MP3,把他們在正確的藝術家的文件夾,說:

/home/user/Music/Artist 

但隨後的文件夾

/home/user/Music/Album 1 (2010) 

仍然存在。我該如何檢查這個文件夾中是否有mp3,如果沒有,請刪除它?

我想答案將是一個命令行,但我願意接受任何建議。另外,需要確認以防萬一。

回答

2

基於ghostdog74的回答是:

#! /bin/bash 

find -depth -type d | while read -r D 
do 
v=$(find "$D" -iname '*.mp3') 
case "$v" in 
"" ) 
    echo "$D no mp3" 
    # rm -fr "$D" #uncomment to use 
;; 
esac 
done 

讓我們來測試它的目錄結構

. 
./deleteme 
./save2 
./save2/x.MP3 
./save-recursive 
./save-recursive/nested 
./save-recursive/nested/x.mp3 
./save 
./save/x.mp3 

輸出是:

./deleteme no mp3 
+0

我相信這是神奇的答案。它也幫助我認識到,我有一些文件,擴展名爲.MP3,而不是.mp3。這個腳本顯示了所有這些以及我正在尋找的非mp3文件。 – 2010-10-18 02:00:14

+0

呵呵,你可能希望'-iname'匹配不區分大小寫的名字。我已經編輯包括這一點。 shell中的各種glob選項應該是不相關的,因爲shell沒有執行實際的glob,所以我刪除了這些選項。 – 2010-10-18 02:00:53

+0

謝謝ghostdog和肯的小編輯。 – 2010-10-18 02:00:56

0
#! /bin/bash 

shopt -s nullglob 
shopt -s nocaseglob 
find -depth -type d | { while read -r D; 
do 
case "$D" in 
    "$DR") continue;; 
esac 
v=$(echo "$D"/*.mp3) 
case "$v" in 
"" ) 
    echo "$D no mp3, to be deleted";; 
    # rm -fr "$D" #uncomment to use 
*) 
    DR=${D%/*} 
    ;; 
esac 
done } 
+0

這給了我不包含MP3文件中的所有目錄的列表。然而,一個意想不到的問題是,每個藝術家文件夾本身都沒有mp3。我運行代碼只是回顯目錄,只是手動刪除相對較少的目錄。否則,我想我可能已經刪除了頂級藝術家目錄(裏面包含專輯目錄)。 – 2010-10-18 00:51:50

+0

等等...這對於文件夾中沒有空格的文件不起作用......讓我用引號來玩。然後把 – 2010-10-18 00:55:42

+0

加上引號。我更早離開了它。 – ghostdog74 2010-10-18 01:02:32

1

不能發表評論還,但@ ghostdog74的find命令檢查,除了實際的MP3子目錄當前目錄,如果沒有的MP3在/ home /用戶/音樂鬆動,它會刪除整棵樹。

如果這些是完全空的目錄,那麼rmdir *將會在不需要任何腳本的情況下執行操作:rmdir無法刪除其中包含文件的文件或目錄。

要處理空間,請在命令頂部或首先在shell中運行IFS=$(echo -en "\b\n")。這可以防止當變量包含空格時變量擴展爲多個參數。如果您在shell中執行此操作,則可能需要執行類似SAVEIFS=$IFS; IFS=...; do stuff; IFS=$SAVEIFS的操作,以便您可以恢復原始設置,或者關閉終端並打開新終端以獲得全新的環境。

+0

作爲對ghostdog74的回答的評論,這更適合。 – 2010-10-18 01:37:39

2

首先刪除不MP3文件到廢寢忘食的空文件夾與JPG文件。

找! -iname「* .MP3」型的F - 刪除

如果你不會刪除空文件夾

find -depth -type d -empty -exec rmdir {} \; 
相關問題