Сценарий сканера медиа

Я - новичок со сценариями Bash. Я недавно работал над сценарием для укрепления компьютеров Ubuntu для школьного проекта. Все подходит, за исключением того, что студентам не разрешают использовать медиа-файлы (.mp3, .mov, и т.д.), и я не уверен, как сделать это. Какую команду (команды) я использовал бы? grep? Я исследовал это в течение пары часов теперь без удачи. Это не должно быть длинно. Все, в чем я нуждаюсь, является примером, и я могу скопировать его для различных расширений. Мне нужен он, чтобы смочь сделать следующее:

  • Найдите медиа-файлы
  • Отправьте пути к файлам к текстовому файлу
  • уведомьте много найденных медиа-файлов

Например, я ищу его для вывода чего-то вроде этого:

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

Любая справка значительно ценится!

0
задан 19 November 2014 в 08:27

2 ответа

Для нахождения файлов определенного типа я не искал бы расширение файла. Я просканировал бы файлы для их типа MIME с помощью комбинации find и file. Этот вывод может тогда быть grep редактор для желаемого mimetypesm, например, 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 ИЛИ (|).

пз: Как, сценарий работает в текущем каталоге. Если Вы хотите сделать его более гибким, добавьте $1 между find и следующий канал. Теперь выполните сценарий и дайте путь для поиска как аргумент.

1
ответ дан 4 August 2019 в 19:14

Определенно более подробная опция (Python), который ищет mimetype (s) использование эти 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()
1
ответ дан 4 August 2019 в 19:14

Другие вопросы по тегам:

Похожие вопросы: