Насколько я знаю, ответ на оба вопроса, к сожалению, «нет».
Подробности (но я все равно упрощаю):
брандмауэр, который активно информирует меня, когда какая-то программа пытается получить доступ к Интернету
фильтр чистой сети, который использует брандмауэры, не работает на уровне приложения, поэтому он не используется для этой цели. Хотя, как правило, можно фильтровать исходящие соединения (для всех программ), это сложно сделать, поскольку вы не можете блокировать подключения к порту 80 (используется для http - как раз используется в качестве примера здесь), что означает, что приложение-изгоя может легко использовать этот порт для соединения. Даже если это было возможно, было бы довольно сложно реализовать, так как соединения либо разрешены, либо заблокированы (а не «перехвачены» или «приостановлены», как, например, ZoneAlarm), поэтому у вас нет возможности активно разрешать или запрещать запрос «на лету». Одним из вариантов на уровне приложения будет AppArmor (вы можете ограничить подключение к Интернету, помимо прочего, там), но он не очень удобен для начинающих и гранулирован.брандмауэр, который активно информирует меня, когда какая-то программа пытается получить доступ к Интернету
Фильтр ядра, который использует брандмауэры, не работает на уровне приложения, поэтому он не используется для этой цели. Хотя, как правило, можно фильтровать исходящие соединения (для всех программ), это сложно сделать, поскольку вы не можете блокировать подключения к порту 80 (используется для http - как раз используется в качестве примера здесь), что означает, что приложение-изгоя может легко использовать этот порт для соединения.Вы можете использовать это вместо этого, которое находит все ваши mp4 в определенной папке и всех подпапках и суммирует их продолжительность до общей суммы. Это также проявляет осторожность, если у них есть специальные символы, такие как пробел и т. Д.
find ~/Videos/tutorials/ -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
Чтобы увидеть итоговые значения каждой подпапки, а также
#!/bin/bash
SEARCHPATH=~/Videos/tutorials
echo "## TOTAL OF EVERY MP4"
find $SEARCHPATH -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
find $SEARCHPATH -type d > /tmp/allFolders.txt
while read -r; do
echo "## TOTAL OF $REPLY"
find "$REPLY" -maxdepth 1 -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
done < /tmp/allFolders.txt
#cleanup
rm /tmp/allFolders.txt
Вы можете использовать это вместо этого, которое находит все ваши mp4 в определенной папке и всех подпапках и суммирует их продолжительность до общей суммы. Это также проявляет осторожность, если у них есть специальные символы, такие как пробел и т. Д.
find ~/Videos/tutorials/ -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
Чтобы увидеть итоговые значения каждой подпапки, а также
#!/bin/bash
SEARCHPATH=~/Videos/tutorials
echo "## TOTAL OF EVERY MP4"
find $SEARCHPATH -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
find $SEARCHPATH -type d > /tmp/allFolders.txt
while read -r; do
echo "## TOTAL OF $REPLY"
find "$REPLY" -maxdepth 1 -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
done < /tmp/allFolders.txt
#cleanup
rm /tmp/allFolders.txt
Вы можете использовать это вместо этого, которое находит все ваши mp4 в определенной папке и всех подпапках и суммирует их продолжительность до общей суммы. Это также проявляет осторожность, если у них есть специальные символы, такие как пробел и т. Д.
find ~/Videos/tutorials/ -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
Чтобы увидеть итоговые значения каждой подпапки, а также
#!/bin/bash
SEARCHPATH=~/Videos/tutorials
echo "## TOTAL OF EVERY MP4"
find $SEARCHPATH -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
find $SEARCHPATH -type d > /tmp/allFolders.txt
while read -r; do
echo "## TOTAL OF $REPLY"
find "$REPLY" -maxdepth 1 -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
done < /tmp/allFolders.txt
#cleanup
rm /tmp/allFolders.txt
Вы должны заменить ./*.mp4 на "$d"/*.mp4:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "$d"/*.mp4| tail -n1
fi
done
. Ваш цикл for находит любые каталоги в ~ / Videos / tutorials / и назначает его путь к значению d переменная. Это каталог, который вы хотите проверить для файлов mp4 с помощью exiftool, в то время как вы говорите exiftool, чтобы использовать текущий каталог с ./.
Другим подходом было бы cd в каталог каждый раз, поэтому ваш код будет выглядеть следующим образом:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
fi
done
Следующий подход может быть использован, если у вас есть неприятные имена файлов для некоторых файлов mp4, например, содержащие пробелы. Он сохраняет имена файлов в массиве и расширяет их, цитируемые в команде exiftool.
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
files=(./*.mp4)
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "${files[@]}"| tail -n1
fi
done
Вы должны заменить ./*.mp4 на "$d"/*.mp4:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "$d"/*.mp4| tail -n1
fi
done
. Ваш цикл for находит любые каталоги в ~ / Videos / tutorials / и назначает его путь к значению d переменная. Это каталог, который вы хотите проверить для файлов mp4 с помощью exiftool, в то время как вы говорите exiftool, чтобы использовать текущий каталог с ./.
Другим подходом было бы cd в каталог каждый раз, поэтому ваш код будет выглядеть следующим образом:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
fi
done
Следующий подход может быть использован, если у вас есть неприятные имена файлов для некоторых файлов mp4, например, содержащие пробелы. Он сохраняет имена файлов в массиве и расширяет их, цитируемые в команде exiftool.
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
files=(./*.mp4)
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "${files[@]}"| tail -n1
fi
done
Вы должны заменить ./*.mp4 на "$d"/*.mp4:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "$d"/*.mp4| tail -n1
fi
done
. Ваш цикл for находит любые каталоги в ~ / Videos / tutorials / и назначает его путь к значению d переменная. Это каталог, который вы хотите проверить для файлов mp4 с помощью exiftool, в то время как вы говорите exiftool, чтобы использовать текущий каталог с ./.
Другим подходом было бы cd в каталог каждый раз, поэтому ваш код будет выглядеть следующим образом:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
fi
done
Следующий подход может быть использован, если у вас есть неприятные имена файлов для некоторых файлов mp4, например, содержащие пробелы. Он сохраняет имена файлов в массиве и расширяет их, цитируемые в команде exiftool.
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
cd "$d"
files=(./*.mp4)
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' "${files[@]}"| tail -n1
fi
done