Пара полезных скриптов

Разгребал я тут свои файловые залежи и наткнулся на эти скрипты. Может понадобятся кому.

Публикую только исходники, потому что рассказывать как пользоваться такими простыми скриптами мне лень. Да и вообще, не стоит запускать что-то либо, если вы не можете понять, к чему это приведёт.

Очистка отсканированных документов от серого фона

Для выполнения требуется ImageMagick. Похожее преобразование выполняет убунтовский Simple Scan в режиме сканирования документов.

mkdir out
find . -maxdepth 1 -iname "*.jpg" | while read file
do
    mogrify -normalize -level 27%,76% -write "out/${file}" "${file}"
done

Пакетное создание миниатюр

Требует ImageMagick аналогично предыдущему скрипту.

mkdir out
find . -maxdepth 1 -name "*.jpg" | while read file
do
    convert "${file}" -geometry '200x200' -quality 80 "out/${file}"
done

Отображение в терминале всех поддерживаемых цветов

Можно взять тут: https://bbs.archlinux.org/viewtopic.php?id=51818

Инвертирование цветов в CSS файле

Небольшая поделка на питоне. Принимает два аргумента - входной и выходной файл. Я его написал, когда делал тёмную тему для jQuery плагина datetimepicker.

Имеет ряд ограничений: обрабатываются только HEX цвета, может испортить некоторые идентификаторы и комментарии вида #текст. Кроме того, не учитывает смысл цветов, например инвертирует цвета теней, делая выпуклые элементы вогнутыми и наоборот.

Идею и первоначальную реализацию (возможно, более удобную, т.к. у неё есть GUI) можно найти тут: http://code.activestate.com/recipes/527747-invert-css-hex-colors/

# -*- coding: utf-8 -*-
import sys
import os
import re
try:
    from string import maketrans
except ImportError:
    maketrans = str.maketrans

symbols = '0123456789abcdef'
trans = maketrans(symbols, symbols[::-1])
pattern = re.compile('#[' + symbols + ']{3,6}', re.IGNORECASE)

def invert(match):
    return match.group().lower().translate(trans)

try:
    with open(sys.argv[1], 'r') as before:
        if not os.path.exists(sys.argv[2]):
            with open(sys.argv[2], 'w') as after:
                out = pattern.sub(invert, before.read())
                after.write(out)
        else:
            print('Output file exists.')
except (IndexError, IOError):
    print('Wrong args.')

Пакетное переименование с увеличением счётчика

Иногда возникает нужда увеличить счётчик в названиях нескольких файлов. Например, увеличить каждый номер в списке файл1.txt, файл2.txt на 5 и получить файл6.txt, файл7.txt, причём так, чтобы порядок файлов остался прежним. Скрипт принимает в качестве аргумента прибавляемое число, как положительное, так и отрицательное.

# -*- coding: utf-8 -*-
import os
import re
import sys
try:
    start = int(sys.argv[1])
except IndexError:
    print('Start number required')
    sys.exit()
flist = os.listdir('.')
for i in flist:
    num = re.search('\d+', i)
    if num:
        old = int(num.group())
        new = old + start
        n = i.replace(str(old), str(new))
        os.rename(i, n)
    else:
        continue