终端 - 删除不包含.mp3文件的所有文件夹

时间:2010-10-18 00:20:48

标签: linux bash unix command-line

我在Linux上使用Banshee,我让它在文件夹层次结构中自动整理我的音乐集。当我将新相册添加到我的音乐文件夹时,Banshee会自动移动(并重命名)mp3并将它们放入正确的Artist文件夹中。如果文件夹中没有其他文件,则该文件夹也会被删除,但如果存在其他文件,则仅移动mp3并保留文件夹。因此,我的音乐文件夹中有许多文件夹,其中不包含mp3,只包含图像文件或类似的辅助文件。

如何删除内部没有mp3文件的任何文件夹(在Music文件夹内)?

例如,假设我有以下内容:

/home/user/Music/

我添加了文件夹“Album 1(2010)”,其中包含mp3并且还包括艺术作品。 Banshee将拉出mp3并将它们放入合适的艺术家文件夹中,比如说:

/home/user/Music/Artist

但随后是文件夹

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

仍然存在。如何检查此文件夹中是否包含mp3,如果没有,请将其删除?

我认为答案将是一个命令行,但我对任何建议持开放态度。此外,最好还是要求确认......以防万一。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

首先删除不使用jpg文件的avid空文件夹的mp3文件。

    找 ! -iname'* .mp3'-type f -delete

如果您不删除空文件夹

find -depth -type d -empty -exec rmdir {} \;

答案 2 :(得分:1)

无法发表评论,但@ ghostdog74的find命令除了实际的子目录外还检查当前目录中的mp3,如果/ home / user / Music中没有mp3,它将删除整个树

如果这些是完全空的目录,那么rmdir *将完成这一操作,无需任何脚本:rmdir无法删除包含文件的文件或目录。

要处理空格,请先在命令顶部或shell中运行IFS=$(echo -en "\b\n")。当变量包含空格时,这可以防止变量扩展为多个参数。如果你在shell中执行此操作,您可能希望执行类似SAVEIFS=$IFS; IFS=...; do stuff; IFS=$SAVEIFS之类的操作,以便您可以恢复原始设置,或者只是关闭终端并打开一个新设置以获得新环境。

答案 3 :(得分: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 }