2010-10-18 100 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 {} \; 
相关问题