媒体扫描器脚本

媒体扫描器脚本

我是 Bash 脚本的初学者。我最近一直在为学校项目编写一个脚本来强化 Ubuntu 计算机。一切进展顺利,只是不允许学生使用任何媒体文件(.mp3、.mov 等),而我不确定该怎么做。我会使用什么命令?grep?我已经研究了几个小时,但毫无收获。这不需要花很长时间。我需要的只是一个示例,我可以将其复制为不同的扩展名。我需要它能够执行以下操作:

  • 查找媒体文件
  • 将文件路径发送到文本文件
  • 通知找到的媒体文件数量

例如,我希望它输出如下内容:

Searching for media files... 5 media files found! Details can be found in 'media.txt'

任何帮助是极大的赞赏!

答案1

要查找特定类型的文件,我不会搜索文件扩展名。我宁愿使用 和 的组合来扫描文件的 MIME 类型findfile然后可以grep针对所需的 mimetypes(例如audio/*和 )编辑此输出video/*

我创建了一个小脚本来实现这一点:

#!/usr/bin/env bash
#Don't know whether you want to do so, but this deletes a existing media.txt
rm media.txt
#Find files of desired MIME types and store them in $list
list=$(find | file -if - | grep -P "(audio/.*?;)|(video/.*?;)")
n=0
#Iterate over each line in the list (one file per line)
while read -r line; do
    #Append the filename to media.txt
    echo "$line" | cut -f1 >> media.txt
    #Increase file counter
    n=$(($n+1))
done <<< "$list"
#Output the result
echo "$n media files found! Saved to media.txt"

请注意,我使用完整的 RegExp 和 grep。要添加一些 MIME 类型,请按照我对已包含的两个类型所做的方式构建它们:(type/enc;)然后使用 RegExp OR ( |) 添加它们。

PS:脚本在当前目录中运行。如果想使其更灵活,请在以下管道之间添加一个$1find现在运行脚本并将要搜索的路径作为参数。

答案2

绝对是一个更详细的选项(python),它使用命令查找 mimetype file。它是这个,适合您的目的。

它能做什么

当找到文件时
它返回一条消息(在终端中):

checking for filetypes: image, video, audio...
4 media files found. See for details:  /home/jacob/Bureaublad/found.txt

当文本文件写入你在脚本头部定义的目录/名称时

或者,如果没有找到

checking for filetypes: image, video, audio...
no files found

如何使用

将下面的脚本复制到一个空文件中,编辑脚本头部部分的三行:

source_dir = "/path/to/directory"
filetypes = ("image", "video", "audio") # you might want to leave this line as it is, used by the file command
report = "/path/to/report.txt"

将其保存为find_media.py,并通过命令在终端窗口中运行它:

python3 /path/to/find_media.py

剧本:

#!/usr/bin/env python3

import os
import subprocess
# ---
source_dir = "/path/to/directory"
filetypes = ("image", "video", "audio")
report = "/path/to/report.txt"
# ---
print("checking for filetypes: "+(", ").join(filetypes)+"."*3)
found = []

def look_for():
    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:
                found.append(file)
    found_files = len(found)
    if found_files != 0:
        print(str(found_files), "media files found. See for details: ", report)
        with open(report, "wt") as out:
            for item in found:
                out.write(item+"\n")
    else:
        print("no files found")

look_for()

相关内容