linux - 检查文件是否存在于给定目录中,而不是子目录中

标签 linux bash shell debian

我写了一个 shell 脚本,主要用于查找 rar 文件并解压缩它们。

为了避免多次解压同一个文件,我添加了一个检查文件类型的检查,即 *.avi、*.mkv 和 *.mp4。

find "/mnt/media1/TV Shows/" -type f -name "*.rar" -print0 | while IFS= read -r -d '' file; do
    DIR=$(dirname "${file}")
    MKV=$(find "${DIR}" -name "*.mkv" -print0)
    AVI=$(find "${DIR}" -name "*.avi" -print0)
    MP4=$(find "${DIR}" -name "*.mp4" -print0)
    if [ ! -f "$MKV" ] && [ ! -f "$AVI" ] && [ ! -f "$MP4" ]; then
            printf "UNRARING ${DIR}\n" >> /home/johan/unrarer.log
            sudo unrar e "${file}"
            MKV=$(find "${DIR}" -name "*.mkv" -print0)
            AVI=$(find "${DIR}" -name "*.avi" -print0)
            MP4=$(find "${DIR}" -name "*.mp4" -print0)
            if [ ! -f "$MKV" ] && [ ! -f "$AVI" ] && [ ! -f "$MP4" ]; then
                    printf "UNRAR FAILED\n" >> /home/johan/unrarer.log
            else
                    printf "UNRAR SUCCESSFUL\n" >> /home/johan/unrarer.log
            fi
    else
            printf "${DIR}: Found an mkv, avi or mp4 file, skipping\n" >> /home/johan/unrarer.log
    fi
done

现在,问题是大多数(如果不是全部)目录都有一个“Sample”子目录,其中包含一个视频文件。此文件被标记为我当前的实现,这不是我想要的。

我希望它在确切的目录 $DIR 中查找,而不是它的任何子目录。

目前,我已经制定了一个解决方法,我只是删除了 Sample 目录(如果存在),但这会破坏 torrents。

我已尝试使用 -wholename 进行一些试验,但没有发现任何有效的方法。

感谢任何帮助。

问候, 约翰

最佳答案

使用-maxdepth 选项将查找限制在当前目录。

MKV=$(find "${DIR}" -name "*.mkv" -print0 -maxdepth 0)
AVI=$(find "${DIR}" -name "*.avi" -print0 -maxdepth 0)
MP4=$(find "${DIR}" -name "*.mp4" -print0 -maxdepth 0)

关于linux - 检查文件是否存在于给定目录中,而不是子目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578112/

相关文章:

bash - 使用 sqlplus 轮询并将结果记录到文件强制换行

bash - kafka 和 JMX 导出商

linux - 如何在 bash 中拆分字符串

linux - shell中的cmd1 & cmd2 和 cmd1 && cmd2 有什么区别

java - Tomcat 正在运行,但 8080 端口没有响应

linux - PATH 路径前缀

linux - 基于 Unix 时间戳过滤 Linux 日志

linux - shell 脚本 : how to use getopts to get last arguments and unhandle arguments

linux - DNSClient 无法通过其主机名 ping DNS 服务器,但能够通过其 IP ping

linux - 我们如何比较两个程序的依赖关系图?