我希望 [递归地] 获取项目文件夹中所有图像文件的列表。遗憾的是,Google 无法帮助我。
如果可能的话,最好使用当前系统的 mime 类型,例如所有具有与 glob 匹配的 mime 的文件image/*
;以便可以轻松扩展任何示例video/*
,等等。
此外,我可能会尝试在一些相当大的卷上使用它,所以我更喜欢不需要对整个目录中的每个文件执行昂贵操作的命令。
注意:我考虑过的一个潜在解决方法是从 mimetypes 数据中获取文件扩展名列表并对find
这些扩展名执行操作,但由于我想要定位的目标文件的文件扩展名可能丢失、双重加载等,所以这种方法不太可取。
编辑:按扩展名搜索文件,我认为这非常简单而且不是我正在寻找的;我编辑了标题以反映我正在专门寻找基于 mimetype 的结果。
答案1
假设您使用的是 14.04(使用 python3),下面的小脚本会递归列出给定目录中的文件。它通过命令识别文件的 mimetype file
,如下所述这里
file --mime-type -b filename
此外,您可以通过使用与命令同一级别的命令shutil
(例如)来扩展脚本。.move / .copy
print
添加 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 表达式中匹配的正则表达式可以轻松扩展。