Я - новичок со сценариями Bash. Я недавно работал над сценарием для укрепления компьютеров Ubuntu для школьного проекта. Все подходит, за исключением того, что студентам не разрешают использовать медиа-файлы (.mp3, .mov, и т.д.), и я не уверен, как сделать это. Какую команду (команды) я использовал бы? grep? Я исследовал это в течение пары часов теперь без удачи. Это не должно быть длинно. Все, в чем я нуждаюсь, является примером, и я могу скопировать его для различных расширений. Мне нужен он, чтобы смочь сделать следующее:
Например, я ищу его для вывода чего-то вроде этого:
Searching for media files... 5 media files found! Details can be found in 'media.txt'
Любая справка значительно ценится!
Для нахождения файлов определенного типа я не искал бы расширение файла. Я просканировал бы файлы для их типа 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
и следующий канал. Теперь выполните сценарий и дайте путь для поиска как аргумент.
Определенно более подробная опция (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()