![bash:删除不包含给定字符串的目录](https://linux22.com/image/98036/bash%EF%BC%9A%E5%88%A0%E9%99%A4%E4%B8%8D%E5%8C%85%E5%90%AB%E7%BB%99%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%9B%AE%E5%BD%95.png)
如何使用 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 目录(及其内容,递归地)(或者文件)标题为wav
或mp3
(案例敏感的),请尝试以下操作:
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 \"{}\"" \;