Файл Pipe, содержащий список изображений в SXIV и отражает изменения MembleDly

при использовании локали «C» вы теряете человеческое сопоставление (например, создание эквивалентов «a» и «A»).

, если вам нужно как сопоставить, так и обработать некоторые символы, не обрабатываемые данными локали glibc; вы можете создать свой собственный языковой стандарт, расширив параметры сортировки по умолчанию.

Вы можете скопировать определение вашего текущего языкового стандарта (например, / usr / share / i18n / locales / en_US) на другое имя. Затем отредактируйте его и в разделе LC_COLLATE:

LC_COLLATE
copy "iso14651_t1"

reorder-after <e>
<U0259> <e>;<PCL>;<MIN>;IGNORE
reorder-after <s>
<U0283> <s>;<PCL>;<MIN>;IGNORE
reorder-end

END LC_COLLATE

скомпилируйте его с помощью: localedef -f ./yourmodifiedfile -t UTF-8 ./someplace , тогда вы можете использовать LC_ALL =. / someplace вместо LC_ALL = C

, если вы хотите использовать это регулярно, поместите созданный каталог с другими стандартными языковыми стандартами (обычно / usr / share / locale или / usr / lib / locale) и назовите его стандартным способом (например, если он основан на на en_US вы можете назвать его, например, "en_US @ IPA". Затем вы можете настроить свои локали на постоянное использование LC_COLLATE = en_US @ IPA (обратите внимание, что вы не должны определять LC_ALL, если хотите индивидуально определить некоторые LC_ * переменные)

Обратите внимание, что U + 02C8 является модификатором, поэтому его следует по праву игнорировать при сопоставлении. Но если вам нужно обрабатывать его как отдельный символ, вы можете использовать его вместо то же самое (для просмотра с подборкой), что и U + 02C8, вот как часто набирается):

# defines a handy symbol, to group together similar chars
collating-symbol <'>

# define 
reorder-after <z>
<'>

reorder-after <e>
<U0259> <e>;<PCL>;<MIN>;IGNORE
reorder-after <s>
<U0283> <s>;<PCL>;<MIN>;IGNORE
reorder-after <'>
<U0027> <'>;<BAS>;IGNORE;IGNORE
<U02C8> <'>;<PCL>;IGNORE;IGNORE

reorder-end

строки: <значение Unicode> <1-й уровень>; <2-й уровень>; <3-й уровень>; <4-й уровень> уровни - это то, что используется для их сортировки.

Я думаю (но не пробовал, я позволил это в качестве упражнения :)), что если вы просто определите последний уровень, он будет вести себя как в основном игнорируемый для сортировки, но все же «другой» с точки зрения uniq (до тех пор, пока так как цепочка всех уровней уникальна, я думаю, что персонаж уникален).

Обычно 1-й уровень является символом группировки, как и все буквы типа е. 2-й уровень обычно предназначен для основного символа, есть несколько других символов для различных версий с диакритическими знаками и (своеобразно?) используется для "особого". 3-й уровень обычно используется для различения прописных и строчных букв и тому подобного.

0
01.01.2019, 00:45
1 ответ

Ваша существующая конструкция будет пытаться запускаться cat images.txt | sxiv -i -tкаждую десятую долю секунды. Если sxivтребуется больше времени, чтобы сделать то, что он делает, все может стать довольно грязным. Возможно, вам лучше посмотреть хэш контрольной суммы всех изображений:

$ md5sum *.jpg | md5sum
4a009e73fb133d2d103dd2e65ef8c605  -

Это берет хеш всех файлов .jpgи делает хэш и . Это означает, что контрольная сумма sur -будет изменяться при изменении любого из изображений, а также при их добавлении или удалении.

Итак, мы можем сделать что-то вроде этого:

#!/bin/bash
old_checksum="$(md5sum *.jpg | md5sum)"
while /bin/true; do
    new_checksum="$(md5sum *.jpg | md5sum)"
    if [[ "$new_checksum" != "$old_checksum" ]]; then
        old_checksum="$new_checksum"
        find. -maxdepth 1 -name \*.jpg -print0 | xargs -0 sxiv -i -t
    fi
    sleep 1
done

В любое время, когда что-то изменится, запишите новую контрольную сумму и повторно -запустите sxiv.

Если вы по-прежнему хотите хранить свой каталог файлов .jpgв images.txt, его можно легко изменить, чтобы использовать содержимое этого файла для создания контрольной суммы и предоставления аргументов для xargsвместо find.

1
28.01.2020, 02:41

Теги

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