【问题标题】:Bash: List directories with a type of file, but missing another type of fileBash:列出具有一种文件类型但缺少另一种文件类型的目录
【发布时间】:2017-03-31 09:31:24
【问题描述】:

我是使用 Bash 的新手,我正在尝试弄清楚如何将一些不同的东西组合到一个脚本中。

我正在寻找被中断的文件传输。这些文件夹包含图像文件(jpg 或 png),但缺少另一个特定文件(finished.txt)。

这是我用来查找带有图像的文件夹的方法(来自here):

for f in */incoming/ ; do
    log_f="${f//\//}"
    echo "searching $f"
    find "$f" -iname "*jpg*" -o -iname "*png*" > "/output/${log_f}.txt"
    echo "$f finished"
done

然后,我正在运行此命令来查找缺少finished.txt 文件的文件夹(来自here):

find -mindepth 2 -maxdepth 2 -type d '!' -exec test -e "{}/finished.txt" ';' -print

有没有办法将它们组合起来,所以我有一个包含 jpg 或 png 文件的文件夹列表,但 没有 有finished.txt?另外,如果我想添加-mtime,我应该把它放在哪里?

或者,如果有更好/更快的方法来做到这一点,我也对此感兴趣。

谢谢!

【问题讨论】:

    标签: bash find command


    【解决方案1】:

    从第一次获取 jpg/png 文件时,您可以使用 dirname 获取目录。然后可以使用目录列表进行迭代并查找finished.txt 文件。找到后,如果不打印,您可以跳过目录。

    下面的东西应该可以满足需要

    for i in `find "$f" -iname "*jpg*" -o -iname "*png*" -exec dirname {} \;`
    do 
        ls  $i | grep finished >/dev/null
        if [ $? -eq 1 ]; then 
            echo $i 
        fi 
    done
    

    在 find 命令的末尾添加“| sort | uniq”可能会删除重复项。类似的东西

    find "$f" -iname "jpg" -o -iname "png" -exec dirname {} \; |排序 |独一无二的

    【讨论】:

    • 谢谢。出于某种原因,我得到了这个:find: ‘’: No such file or directory
    • 我希望你设置的是上面命令“$f”中参数化的f。所以像 f=/Users/guest/mydirectory 这样的东西,然后运行上面的命令。
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2019-02-10
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多