bash:删除不包含给定字符串的目录

bash:删除不包含给定字符串的目录

如何使用 bash 删除不包含名为 wav 或 mp3 的目录的目录?我使用 macOS Sierra。

find . -type d \! -exec test -e '{}/wav' \; -print查找不包含 wav 目录的目录。如何将 mp3 包含到此命令中?我怎样才能删除生成的目录?

我的音乐库遵循以下结构: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>,其中格式为 wav 或 mp3。有许多目录没有任何音频文件但覆盖,例如因此我不能只搜索空目录来删除那些不包含音频文件的目录。

答案1

首先,在你这样做之前,备份您的文件。

严重地。


查找并删除不直接包含目录的 Artist 目录(及其内容,递归地)(或者文件)标题为wavmp3(案例敏感的),请尝试以下操作:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

只有在你拥有之后确认输出匹配您希望删除的目录(并仔细检查你的备份)然后你应该运行:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

答案2

对于 2 个测试,运行测试两次,如果两者都失败,则执行以下操作:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

相关内容