我在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,如果没有,请将其删除?
我认为答案将是一个命令行,但我对任何建议持开放态度。此外,最好还是要求确认......以防万一。
答案 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 }