при использовании локали «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-й уровень обычно используется для различения прописных и строчных букв и тому подобного.
Ваша существующая конструкция будет пытаться запускаться 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
.