Ric*_*nez 5 unix linux bash command-line
我在 Linux 上使用 Banshee,让它在文件夹层次结构中自动组织我的音乐收藏。当我将新专辑添加到“音乐”文件夹时,Banshee 会自动移动(并重命名)mp3,并将它们放入正确的“艺术家”文件夹中。如果文件夹中没有其他文件,则该文件夹也会被删除,但如果存在其他文件,则仅移动 mp3,而保留该文件夹。因此,我的音乐文件夹中有许多文件夹,其中不包含 mp3,仅包含图像文件或类似的辅助文件。
我将如何删除其中没有 mp3 文件的任何文件夹(在 Music 文件夹内)?
例如,假设我有以下内容:
/home/user/Music/
Run Code Online (Sandbox Code Playgroud)
我添加了文件夹“Album 1 (2010)”,其中包含 mp3 和封面艺术。Banshee 会取出 mp3 并将它们放入正确的艺术家文件夹中,例如:
/home/user/Music/Artist
Run Code Online (Sandbox Code Playgroud)
但然后文件夹
/home/user/Music/Album 1 (2010)
Run Code Online (Sandbox Code Playgroud)
仍然存在。如何检查该文件夹中是否有mp3,如果没有则将其删除?
我认为答案将是命令行,但我愿意接受任何建议。另外,最好要求确认……以防万一。
根据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
Run Code Online (Sandbox Code Playgroud)
我们来测试一下目录结构
.
./deleteme
./save2
./save2/x.MP3
./save-recursive
./save-recursive/nested
./save-recursive/nested/x.mp3
./save
./save/x.mp3
Run Code Online (Sandbox Code Playgroud)
输出是:
./deleteme no mp3
Run Code Online (Sandbox Code Playgroud)