列出不包含某些文件的目录



我使用此命令查找当前目录中包含.mp3的所有目录,并仅过滤掉目录名称:

find . -iname "*.mp3" | sed -e 's!/[^/]*$!!' -e 's!^./!!' | sort -u

我现在想要相反的东西,但我发现它有点难。我不能只在 find 命令中添加"!",因为它只会在打印它们时排除.mp3,找不到不包含.mp3的目录。

我用谷歌搜索了这个,并在stackoverflow和 unix.stackexchange.com 上搜索。到目前为止,我已经尝试了这个脚本,它返回此错误:

#!/bin/bash
find . -type d | while read dir
do
if [[! -f $dir/*.mp3 ]]
then
    echo $dir
fi
done
/

home/user/bin/try.sh:第 5 行:[[!:找不到命令

#!/bin/bash
find . -type d | while read dir
do
if [! -f $dir/*.mp3 ]
then
    echo $dir
fi
done
/

home/user/bin/try.sh: 第 5 行: [!: 找不到命令

#!/bin/bash
find . -type d | while read dir
do
if [[! -f "$dir/*.mp3" ]]
then
    echo $dir
fi
done
/

home/user/bin/try.sh: 第 5 行: [!: 找不到命令

我认为这与测试命令的多个参数有关。

由于我正在测试所有目录,因此变量将更改,并且我对文件名使用通配符。

任何帮助都非常感谢。 谢谢。

[ "$(echo $dir/*.mp3)" = "$dir/*.mp3" ]

应该工作。

或者干脆在"["和"!"之间添加一个空格

一种可能明显更快的方法是

if find "$dir" -name '*.mp3' -quit ; then
  : # there are mp3-files in there.
else
  ; # no mp3:s
fi

好的,我使用计数器解决了自己的答案。

我不知道它的效率如何,但它有效。 我知道它可以做得更好。请随时批评。

find . -type d | while read dir
do
count=`ls -1 "$dir"/*.mp3 2>/dev/null | wc -l`
    if [ $count = 0 ]
    then
        echo $dir
    fi
done

这将打印所有不包含 MP3 的目录 它还显示子目录,这要归功于 find 命令递归打印目录。

我运行了一个脚本来自动下载我的 mp3 收藏的封面。它将一个名为"cover.jpg"的文件放在每个专辑的目录中,它可以检索其艺术。 我需要检查脚本失败的专辑 - 即哪些 CD(目录)不包含名为 cover.jpg 的文件。这是我的努力:

find . -maxdepth 1 -mindepth 1 -type d | while read dir; do [[ ! -f $dir/cover.jpg ]] && echo "$dir has no cover art"; done

maxdepth 1 阻止查找命令下降到我的 WD My Cloud NAS 服务器为每个相册创建的隐藏目录,并放置默认的通用光盘映像。(这在下次扫描期间被清除。

编辑:cd 到 MP3 目录并从那里运行它,或将上面的命令中的 . 更改为指向它的路径。

相关内容

  • 没有找到相关文章

最新更新