通过命令行递归查找目录中与 mimetype 匹配的文件

通过命令行递归查找目录中与 mimetype 匹配的文件

我希望 [递归地] 获取项目文件夹中所有图像文件的列表。遗憾的是,Google 无法帮助我。

如果可能的话,最好使用当前系统的 mime 类型,例如所有具有与 glob 匹配的 mime 的文件image/*;以便可以轻松扩展任何示例video/*,等等。

此外,我可能会尝试在一些相当大的卷上使用它,所以我更喜欢不需要对整个目录中的每个文件执行昂贵操作的命令。


注意:我考虑过的一个潜在解决方法是从 mimetypes 数据中获取文件扩展名列表并对find这些扩展名执行操作,但由于我想要定位的目标文件的文件扩展名可能丢失、双重加载等,所以这种方法不太可取。


编辑:按扩展名搜索文件,我认为这非常简单而且不是我正在寻找的;我编辑了标题以反映我正在专门寻找基于 mimetype 的结果。

答案1

假设您使用的是 14.04(使用 python3),下面的小脚本会递归列出给定目录中的文件。它通过命令识别文件的 mimetype file,如下所述这里

file --mime-type -b filename

此外,您可以通过使用与命令同一级别的命令shutil(例如)来扩展脚本。.move / .copyprint

添加 mimetype

对于组合搜索,您可以通过将 mimetype 添加到 -tuple 来添加(或删除)要搜索的 mimetype filetypes

剧本

#!/usr/bin/env python3

import os
import subprocess

source_dir = "/path/to/directory"
filetypes = ("image", "video")

for root, dirs, files in os.walk(source_dir):
    for name in files:
        file = root+"/"+name
        ftype = subprocess.check_output(['file', '--mime-type', '-b', file]).decode('utf-8').strip()
        if ftype.split("/")[0] in filetypes:
            print(file)

如何使用它

将脚本复制到一个空文件中,设置目录为列表(sourcedir)并设置要查找的 mimtype(filetypes),将其保存为list_files.py并通过以下命令运行:

python3 /path/to/list_files.py

答案2

我不擅长编写脚本,但仍然可以递归地找到所有文件,并使用文件的 mimetype 显示图像类型。

 find . -print0 | while IFS= read -r -d'' f; do 
    file -ib $f | grep "^image/" && echo $f; 
 done

答案3

这可能很接近:

find . -type f -exec mimetype {} + | awk -F': +' '{ if ($2 ~ /^image\//) print $1 }'

awk 表达式中匹配的正则表达式可以轻松扩展。

相关内容