Да, можно. Перейдите на страницу настроек и щелкните расширенные настройки. В разделе «Веб-контент» нажмите кнопку шрифтов. Затем в нижней части диалогового окна перейдите к дополнительным параметрам шрифта.
Это приведет вас к подключаемому модулю Chrome для расширенных шрифтов / скриптов шрифтов
вот ссылка, если ссылки нет в шрифтах раздел
https://chrome.google.com/webstore/detail/advanced-font-settings/caclkomlalccbpcdllchkeecicepbmbm
изменить
https://chrome.google.com/webstore/detail / styler / bogdgcfoocbajfkjjolkmcdcnnellpkb
это расширение должно работать, извините, я думал, что это позволяет настраиваемые сценарии.
Утилита pv
представляет собой "причудливую cat
", что означает, что вы можете использовать pv
в большинстве ситуаций, где вы использовали бы cat
.
Используя cat
с md5sum
, вы можете вычислить контрольную сумму MD5 для одного файла с помощью
cat file | md5sum
или с pv
,
pv file | md5sum
К сожалению, это не позволяет md5sum
правильно вставлять имя файла в вывод.
Теперь, к счастью, pv
является действительно причудливым cat
, и в некоторых системах (Linux )он может наблюдать за передаваемыми данными. через другой процесс. Это делается с помощью его опции -d
с идентификатором процесса этого другого процесса.
Это означает, что вы можете делать такие вещи, как
md5sum dir/* | sort >sums &
sleep 1
pv -d "$(pgrep -n md5sum)"
Это позволит pv
наблюдать за процессом md5sum
. sleep
предназначен для правильного запуска md5sum
, работающего в фоновом режиме. pgrep -n md5sum
вернет PID самого последнего запущенного md5sum
процесса, которым вы владеете. pv
завершится, как только процесс, за которым он наблюдает, завершится.
Я протестировал этот конкретный способ запуска pv
несколько раз, и в целом он работает хорошо, но иногда кажется, что он перестает что-либо выводить, когда md5sum
переключается на следующий файл. Иногда кажется, что в оболочке появляются ложные фоновые задачи.
Вероятно, было бы безопаснее запускать его как
md5sum dir/* >sums &
sleep 1
pv -W -d "$!"
sort -o sums sums
Параметр -W
заставит pv
ждать, пока фактически не будут переданы данные, хотя это также не всегда работает надежно.
Данные, которые вы передаете через конвейер, не являются данными файлов, которые md5sum
обрабатывают, а представляют собой выходные данные md5sum
, которые для каждого файла состоят из одной строки, содержащей :MD5. -хэш, два пробела и имя файла. Поскольку мы знаем это заранее, мы можем сообщить pv
соответствующим образом, чтобы он мог отображать точный индикатор прогресса. Есть два способа сделать это.
Первый, предпочтительный метод (, предложенный frostschutz ), использует тот факт, что md5sum
генерирует одну строку для каждого обрабатываемого файла, и тот факт, что pv
имеет построчный режим, в котором подсчитываются строки, а не байты.. В этом режиме pv
будет перемещать индикатор выполнения только тогда, когда он встречает новую строку в пропускной способности, то есть для каждого файла, завершенного md5sum
. В Bash этот первый метод может выглядеть так:
set -- *.iso; md5sum "$@" | pv --line-mode -s $# | sort
Встроенная функция set
используется для установки позиционных параметров для обрабатываемых файлов. (шаблон оболочки *.iso
расширяется оболочкой ). Затем md5sum
сообщается об обработке этих файлов($@
расширяется до позиционных параметров ), а pv
в линейном режиме будет перемещать индикатор выполнения каждый раз, когда файл обрабатывается / выводится строка md5sum
. Примечательно, что pv
сообщается об общем количестве ожидаемых строк (-s $#
), так как специальный параметр оболочки $#
расширяется до количества позиционных аргументов.
Второй метод основан не на строке -, а на байте -. С md5sum
это излишне сложно, но какая-то другая программа может производить не строки, а, например, непрерывные данные, и тогда этот подход может оказаться более практичным. Однако я иллюстрирую это md5sum
. Идея состоит в том, чтобы рассчитать количество данных, которыеmd5sum
(или какая-либо другая программа )создаст, и использовать их для информирования pv
. В Баше,это может выглядеть следующим образом:
os=$(( $( ls -1 | wc -c ) + $( ls -1 | wc -l ) * 34 ))
md5sum * | pv -s $os | sort
В первой строке вычисляется выходной размер(os
)оценка :первое слагаемое — количество байтов, необходимых для кодирования имен файлов (в т.ч. новая строка ), второй термин количество байтов, используемых для кодирования хэшей MD5 -(по 32 байта )плюс 2 пробела. Во второй строке мы сообщаем pv
, что ожидаемый объем данных составляет os
байт, чтобы он мог показывать точный индикатор прогресса, ведущий к 100% (, какой индикатор обновляется для каждого готового файла md5summed ).
Очевидно, что оба метода практичны только в том случае, если необходимо обработать несколько файлов. Кроме того, следует отметить, что, поскольку вывод md5sum
не связан с количеством времени, которое программа md5sum
должна потратить на обработку базовых данных, индикатор выполнения можно считать несколько вводящим в заблуждение. Например, во втором методе файл с самым коротким именем будет давать наименьшее обновление прогресса, даже если на самом деле он может быть самым большим по размеру. Опять же, если все файлы имеют одинаковые размеры и имена, это не должно иметь большого значения.
Как уже отмечалось в комментариях и других ответах:
pv
только md5sum
вывод :контрольных сумм и имен файлов; таким образом, индикатор выполнения pv
не может показать, сколько данных считывается md5sum
. pv
размер файла (с ), который вы передаете в него (вручную, с-s
)неудобно. Перенос содержимого ваших файлов в pv
, а затем в md5sum
даст вам индикатор выполнения, но имена файлов будут потеряны.
Этот код — не очень элегантный способ иметь и то, и другое — осмысленный индикатор выполнения и имена файлов с контрольными суммами:
#!/bin/sh
for file in "$@"; do
pv -- "$file" |
md5sum |
sed 's/-$//' |
printf '%s%s\n' "$(cat -)" "$file"
done
Скрипт предназначен для вызова как:
./script dir/*
Конечно, вы можете объявить его как функцию, чтобы не вводить путь к нему для вызова (или добавлять его в свойPATH
):
function pvsum () {
for file in "$@"; do
pv -- "$file" |
md5sum |
sed 's/-$//' |
printf '%s%s\n' "$(cat -)" "$file"
done
}
Таким образом, команда pvsum dir/* | sort
будет эквивалентна вашей md5sum dir/* | pv -s <size> | sort
.
Его вывод:
$./testscript testdir/*
4.00GiB 0:00:09 [ 446MiB/s] [==============================>] 100%
9dab5f8add1f699bca108f99e5fa5342 testdir/file1
1.00GiB 0:00:02 [ 447MiB/s] [==============================>] 100%
06a738a71e3fd3119922bdac259fe29a testdir/file2
Что он делает:
pv
в md5sum
с отображением индикатора выполнения по умолчанию. sed
используется для удаления -
, напечатанного md5sum
(, который считывается со стандартного ввода ); это также попытка сделать вывод пригодным для потребленияmd5sum -c
(благодаря frostschutz за указание на это)1 . Оsort
:
Я не уверен в ваших ожидаемых результатах, поэтому просто проигнорировал их.Поскольку pv
записывает свой индикатор выполнения в стандартную ошибку, передача всего в sort
отсоединит вывод pv
от вывода md5sum
.
В любом случае, вы можете просто добавить | sort
после done
в приведенном выше коде и проверить, устраивает ли вас результат.
1 Обратите внимание, что вывод кода, показанного выше, не подходит для md5sum -c
, если имена файлов содержат символы новой строки. Обработка новых строк возможна, но некоторые версии md5sum
ведут себя по-разному в этом отношении (см., например, ответы на этот вопрос ), что делает общее решение непростым (и выходит за рамки этого ответа ).
Предполагая последнюю версию md5sum
, попытка решить эту проблему может быть:
for file in "$@"; do
pv -- "$file" |
md5sum |
sed 's/-$//' |
printf '%s%s\n' "$(cat -)" "$file" |
sed -n 'H; 1h; $!d; g; s/\\/\\\\/g; s/\n/\\n/g; t x; p; q; :x s/^/\\/; p;'
done
Там, где единственное дополнение, окончательное sed
, будет:
H
Добавляет новую строку и текущее пространство шаблонов в пространство хранения; 1h
переопределяет предыдущий H
только для первой строки, делая то же самое, но без добавления новой строки; $!d
запускает новый цикл, если текущая строка не последняя; g
помещает содержимое пространства хранения в пространство шаблонов. \
)любой обратной косой черты в результирующем пространстве шаблона. \n
любую новую строку в результирующем пространстве шаблона. t x
:ветвь на метку x
), обратная косая черта добавляется в начале контрольной суммы, чтобы сигнализировать md5sum -c
, что что-то должно быть неэкранировано; в противном случае просто выйти. В обоих случаях распечатайте(p
)пространство шаблонов в стандартный вывод непосредственно перед выходом из (опция -n
отключает автоматическую -печать ). Вот грязный хак для получения прогресса по файлам:
for f in iso/*
do
pv "$f" | (
cat > /dev/null &
md5sum "$f"
wait
)
done
Как это выглядит:
4.15GiB 0:00:32 [ 130MiB/s] [================================>] 100%
0db0b36fc7bad7b50835f68c369e854c iso/KNOPPIX_V7.6.1DVD-2016-01-16-EN.iso
792MiB 0:00:06 [ 130MiB/s] [================================>] 100%
97537db63e61d20a5cb71d29145b2937 iso/archlinux-2016.10.01-dual.iso
843MiB 0:00:06 [ 129MiB/s] [================================>] 100%
1b5dc31e038499b8409f7d4d720e3eba iso/lubuntu-16.04-desktop-i386.iso
259MiB 0:00:02 [ 130MiB/s] [=========> ] 30% ETA 0:00:04
...
Здесь делается несколько предположений. Во-первых, чтение данных происходит медленнее, чем их хеширование. Во-вторых, эта ОС будет кэшировать ввод-вывод, поэтому данные не будут (физически )считываться дважды, даже если pv
и md5sum
являются полностью независимыми устройствами чтения.
Преимущество такого грязного, грязного хака заключается в том, что вы можете легко адаптировать его для создания индикатора выполнения для всех данных, а не только для одного файла. И все еще делать странные вещи, такие как сортировка вывода после этого.
pv iso/* | (
cat > /dev/null &
md5sum iso/* | sort
wait
)
Как это выглядит (в процессе):
15.0GiB 0:01:47 [ 131MiB/s] [===========================> ] 83% ETA 0:00:21
Как это выглядит (готово):
18.0GiB 0:02:11 [ 140MiB/s] [================================>] 100%
0db0b36fc7bad7b50835f68c369e854c iso/KNOPPIX_V7.6.1DVD-2016-01-16-EN.iso
155603390e65f2a8341328be3cb63875 iso/systemrescuecd-x86-4.2.0.iso
1b5dc31e038499b8409f7d4d720e3eba iso/lubuntu-16.04-desktop-i386.iso
1b6ed6ff8d399f53adadfafb20fb0d71 iso/systemrescuecd-x86-4.4.1.iso
25715326d7096c50f7ea126ac20eabfd iso/openSUSE-13.2-KDE-Live-i686.iso
...
Ну, это для хаков. Проверьте другие ответы для правильных решений. ;-)
pv
, дляmd5sum
:-)usage
, если вы неправильно ввели шаблон. ".* *"
... OK
pv
останется на {окне экрана/терминала} pv
процесса, один глобальный и по одному для каждого файла, глобальный pv
«подсчитывает только файлы»,а другой измеряет скорость и количество передаваемых данных Я использую имя md5summer
, делаю шеллскрипт исполняемым и помещаю его в каталог в PATH (мой каталог ~/bin
, вы можете предпочесть/usr/local/bin
).
#!/bin/bash
# date sign comment
# 20190119 sudodus created md5summer version 1.0
if [ "$1" == "-v" ]
then
verbose=true
shift
else
verbose=false
fi
if [ $# -ne 1 ]
then
echo "Usage: $0 [-v] <pattern>"
echo "Example: $0 '*.iso' # notice the quotes"
echo " $0 -v '*.iso' # verbose"
exit
fi
tmpstr=$(find $1 -maxdepth 0 -type f 2> /dev/null)
if [ "$tmpstr" == "" ]
then
echo "No such file '$1'. Try another pattern!"
exit
fi
tmpdir=$(mktemp -d)
tmpfil="$tmpdir/fil1"
tmpfi2="$tmpdir/fil2"
resetvid="\0033[0m"
prev2line="\0033[2F"
next2line="\0033[2E"
sln=1
cln=0
cnt=0
for i in $1
do
if test -f "$i"
then
cln=$((cln+1))
tmp=$(find -L "$i" -printf "%s")
cnt=$((cnt+tmp))
fi
done
echo "
number of files = $cln
total file size = $cnt B ~ $(($cnt/2**20)) MiB
"
for i in $1
do
if test -f "$i"
then
tmpnam=$(echo -n "$i")
tmpsum=$(< "$i" pv -ptrbs "$cnt" | md5sum)
sleep 0.05
echo "$sln" | pv -ls "$cln" > /dev/null
sleep 0.05
sln="$sln
$i"
sleep 0.05
printf "${tmpsum/\-}${tmpnam}\n" >> "$tmpfil"
echo -ne "$prev2line" > /dev/stderr
fi
done
sync
sleep 0.1
echo -ne "$next2line" > /dev/stderr
echo "-----"
if $verbose
then
sort -k2 "$tmpfil" | tee "$tmpfi2" | md5sum -c
echo "-----"
cat "$tmpfi2"
else
sort -k2 "$tmpfil"
fi
sleep 0.5
sync
rm -r "$tmpdir"
Использование
$ md5summer
Usage: /home/sudodus/bin/md5summer [-v] <pattern>
Example: /home/sudodus/bin/md5summer '*.iso' # notice the quotes
/home/sudodus/bin/md5summer -v '*.iso' # verbose
Я тестировал в этом каталоге
$ ls -1a
.
..
'filename with spaces'
md5summer
md5summer1
md5summer2
subdir
.ttt
zenity-info-message.png
Обычное использование плюс шаблон для просмотра скрытых файлов
$ md5summer ".* *"
number of files = 6
total file size = 12649 B ~ 0 MiB
8,32KiB 0:00:00 [ 156MiB/s] [=============================> ] 67%
6,00 0:00:00 [ 133k/s] [====================================>] 100%
-----
184d0995cc8b6d8070f89f15caee35ce filename with spaces
28227139997996c7838f07cd4c630ffc md5summer
3383b86a0753e486215280f0baf94399 md5summer1
28227139997996c7838f07cd4c630ffc md5summer2
31cd03f64a466e680e9c22fef4bcf14b .ttt
670b8db45e57723b5f1b8a63399cdfa1 zenity-info-message.png
Подробный вывод плюс шаблон для просмотра скрытых файлов
$ md5summer -v ".* *"
number of files = 6
total file size = 12649 B ~ 0 MiB
8,32KiB 0:00:00 [ 184MiB/s] [=============================> ] 67%
6,00 0:00:00 [ 133k/s] [====================================>] 100%
-----
filename with spaces: OK
md5summer: OK
md5summer1: OK
md5summer2: OK
.ttt: OK
zenity-info-message.png: OK
-----
184d0995cc8b6d8070f89f15caee35ce filename with spaces
28227139997996c7838f07cd4c630ffc md5summer
3383b86a0753e486215280f0baf94399 md5summer1
28227139997996c7838f07cd4c630ffc md5summer2
31cd03f64a466e680e9c22fef4bcf14b .ttt
670b8db45e57723b5f1b8a63399cdfa1 zenity-info-message.png
Перенаправление в файл, сначала вывод на экран
$ md5summer ".* *" > subdir/save
8,32KiB 0:00:00 [ 180MiB/s] [=============================> ] 67%
6,00 0:00:00 [ 162k/s] [====================================>] 100%
, а затем сохраненный вывод
.$ cat subdir/save
number of files = 6
total file size = 12649 B ~ 0 MiB
-----
184d0995cc8b6d8070f89f15caee35ce filename with spaces
28227139997996c7838f07cd4c630ffc md5summer
3383b86a0753e486215280f0baf94399 md5summer1
28227139997996c7838f07cd4c630ffc md5summer2
31cd03f64a466e680e9c22fef4bcf14b .ttt
670b8db45e57723b5f1b8a63399cdfa1 zenity-info-message.png
Проверка iso-файлов
$ md5summer "*.iso"
number of files = 10
total file size = 7112491008 B ~ 6783 MiB
28,0MiB 0:00:00 [ 160MiB/s] [> ] 0%
10,0 0:00:00 [ 204k/s] [====================================>] 100%
-----
7a27fdd46a63ba4375896891826c1c88 debian-live-8.6.0-amd64-lxde-desktop.iso
d70eec28cdbdee7f7aa95fb53b9bfdac debian-live-8.7.1-amd64-standard.iso
382cfbe621ca446d12871b8945b50d20 debian-live-8.8.0-amd64-standard.iso
44473dfe2ee1aad0f71506f1d5862457 debian-live-8.8.0-i386-standard.iso
f396b3532fa84059e7738c3c1827bada debian-live-9.3.0-amd64-cinnamon.iso
8f6def28ae7cbefa0a6e59407c884466 debian-live-9.6.0-amd64-cinnamon.iso
90b1815da0a5bf4ee4b00eec2b5d3587 debian-testing-amd64-netinst_2017-07-28.iso
8f75074ab98e166b7469299d3e459ac6 mini-amd64-2016-01-21-daily.iso
e580266fba58eb34b05bf6e13f51a047 mini-jessie-32.iso
646c109a9a16c0527ce1c7afa922e2ed mini-jessie-64.iso