Transliteration
cat - | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/" | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/" | \
sed "s/ч/ch/"|sed "s/Ч/CH/"|sed "s/ш/sh/"|sed "s/Ш/SH/"|sed "s/ё/jo/"|sed "s/Ё/JO/"|sed "s/ж/zh/"|sed "s/Ж/ZH/"|sed "s/щ/sh\'/" | \
sed "s/Щ/SH/"|sed "s/э/je/"|sed "s/Э/JE/"|sed "s/ю/ju/" |sed "s/Ю/JU/"|sed "s/я/ja/"|sed "s/Я/JA/" |sed "s/ъ/\`/"|sed "s/ъ/\`/" | \
sed "s/ь/\'/"|sed "s/Ь/\'/"
Конвертим все теги mp3-файлов в текущем каталоге с быдло-cp1251 на ПравоСлавный unicode (необходим mp3unicode!):
%find . -name "*.mp3" -exec mp3unicode –source-encoding windows-1251 –id3v1-encoding none –id3v2-encoding unicode {} \;
Инструкция по сборке (В конце статьи бинарный пакет...)
Update: mp3unicode - Гавно (поганит уже UTF8 теги)
cat - | sed "y/абвгдезийклмнопрстуфхцы/abvgdezijklmnoprstufxcy/" | sed "y/АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEZIJKLMNOPRSTUFXCY/" | \
sed "s/ч/ch/"|sed "s/Ч/CH/"|sed "s/ш/sh/"|sed "s/Ш/SH/"|sed "s/ё/jo/"|sed "s/Ё/JO/"|sed "s/ж/zh/"|sed "s/Ж/ZH/"|sed "s/щ/sh\'/" | \
sed "s/Щ/SH/"|sed "s/э/je/"|sed "s/Э/JE/"|sed "s/ю/ju/" |sed "s/Ю/JU/"|sed "s/я/ja/"|sed "s/Я/JA/" |sed "s/ъ/\`/"|sed "s/ъ/\`/" | \
sed "s/ь/\'/"|sed "s/Ь/\'/"
Конвертим все теги mp3-файлов в текущем каталоге с быдло-cp1251 на ПравоСлавный unicode (необходим mp3unicode!):
%find . -name "*.mp3" -exec mp3unicode –source-encoding windows-1251 –id3v1-encoding none –id3v2-encoding unicode {} \;
Инструкция по сборке (В конце статьи бинарный пакет...)
Update: mp3unicode - Гавно (поганит уже UTF8 теги)
find . -name "*.mp3" -exec java -jar ~/Bash_sc/id3iconv-0.2.1.jar {}\;
нужны id3iconv и Java (apt-get install sun-java6-jre) из non-free
Конверт имен файлофф
convmv -r --notest -f cp1251 -t utf8
Место на диске
Иногда приходится смотреть, кто больше всего занимает место, причём интересуют кандидаты весом в несколько Mb или Gb:
du -hs * | grep "^[0-9,]\+[MG]\+"
du --max-depth=1 $1|sort -n -k 1 |awk '{ printf "%.3f Mb \t%s\n", (0+$1)/1024.0/1024.0, $0 }' -
Погода
lynx --dump http://weather.noaa.gov/weather/current/URWW.html | sed -n "/Temperature/s/[0-9][0-9]\? F (//p; /Humidity/p" | tr -d ")"
Права и разрешения
В текущей директории рекурсивно сменить разрешения на все директории
find ./ -type d -exec chmod 775 {} \;
то же для файлов
find ./ -type f -exec chmod 664 {} \;
Владелетс
find ./ -exec chown user:group {} \;
Как снять флаг executable только для файлов в каталоге
find . -type f -exec chmod -x {} \;
Эта команда снимет флажки x со всех файлов в текущем каталоге, но оставит в неприкосновенности каталоги, линки, пайпы и т.п. Вариация данной команды также может быть использована для следующей задачи.
Поиск файлов по содержимому
Используя тот же принцип, мы можем искать файлы не только по имени и типу, но и по содержимому. Пример:
find ~ -exec egrep -i "password" /dev/null {} \;
Echo и sudo
Довольно долго мучался по поводу следующей проблемы. Часто требуется выполнить команду такого рода:
sudo echo "hello world" >> /path/to/file
Т.е. от имени суперпользователя записать что-либо в файл иначе недоступный для записи. На это shell ругнется, сказав о нехватке прав. Это связанно с процессом выполнения данной команды: файл /path/to/file открывается от имени обычного пользователя, тогда как первая часть команды выполняется от рута. При перенаправлении stdout в открытый файл и возникает ошибка.
Ситуацию можно исправить следующим образом:
sudo sh -c 'echo "Hello world" >> /path/to/file'
Однако, есть и более элегантный способ. Для этого понадобится команда tee, читающая stdin и пишущая в stdout или файл:
echo "hello world" | sudo tee -a /path/to/file
Если необходимо перенаправление вида ">" вместо ">>", флажок "-a" не используем:
echo "hello world" | sudo tee /path/to/file
Лично мне эта конструкция экономит много полезных секунд :).
Создание и монтирование образа iso
mount -o loop, unhide -t iso9660 filename.iso /mnt/iso
dd if=/dev/cdrom of=file.iso
mkisofs ~/file.iso /tmp/directory
где file.iso - создаваемый образ, /tmp/directory - каталог с исходными файлами.
Копирование, локальное и не только
Кроме использования стандартной команды "cp" существует оригинальный способ копирования через пайпы (pipes):
cd /
tar -cf - | tar -C -xf -
Команда скопирует каталог в каталог . Этот способ очень полезен при копировании больших объемов данных. При необходимости можно добавить и архивацию ключиком "-z" или "-j":
tar -czf - | tar -C -xzf -
Этот рецепт можно немного дополнить. При необходимости передачи файлов по сети из локальной машины на удаленную можно использовать следующую конструкцию:
cd /
tar czf - | ssh tar xzf - -C
В результате получился некий аналог scp.
X Forwarding
Полезная и простая фича. Если нужно запустить на удаленной машине что-то, требующее X'ы, добавляем к стандартной команде ssh пару ключиков:
ssh -X -Y
и спокойно запускаем графические приложения на удаленной машине remote_box.
Поиск дублирующихся файлов fdupes (app-misc/fdupes в gentoo portages) - очень полезно на разного рода файлопомойках...
Проверка работы регулярного выражения
echo "somestring" | egrep "regexp" && echo "true" || echo "false"
Владелетс
find ./ -exec chown user:group {} \;
Как снять флаг executable только для файлов в каталоге
find . -type f -exec chmod -x {} \;
Эта команда снимет флажки x со всех файлов в текущем каталоге, но оставит в неприкосновенности каталоги, линки, пайпы и т.п. Вариация данной команды также может быть использована для следующей задачи.
Поиск файлов по содержимому
Используя тот же принцип, мы можем искать файлы не только по имени и типу, но и по содержимому. Пример:
find ~ -exec egrep -i "password" /dev/null {} \;
Echo и sudo
Довольно долго мучался по поводу следующей проблемы. Часто требуется выполнить команду такого рода:
sudo echo "hello world" >> /path/to/file
Т.е. от имени суперпользователя записать что-либо в файл иначе недоступный для записи. На это shell ругнется, сказав о нехватке прав. Это связанно с процессом выполнения данной команды: файл /path/to/file открывается от имени обычного пользователя, тогда как первая часть команды выполняется от рута. При перенаправлении stdout в открытый файл и возникает ошибка.
Ситуацию можно исправить следующим образом:
sudo sh -c 'echo "Hello world" >> /path/to/file'
Однако, есть и более элегантный способ. Для этого понадобится команда tee, читающая stdin и пишущая в stdout или файл:
echo "hello world" | sudo tee -a /path/to/file
Если необходимо перенаправление вида ">" вместо ">>", флажок "-a" не используем:
echo "hello world" | sudo tee /path/to/file
Лично мне эта конструкция экономит много полезных секунд :).
Создание и монтирование образа iso
mount -o loop, unhide -t iso9660 filename.iso /mnt/iso
dd if=/dev/cdrom of=file.iso
mkisofs ~/file.iso /tmp/directory
где file.iso - создаваемый образ, /tmp/directory - каталог с исходными файлами.
Копирование, локальное и не только
Кроме использования стандартной команды "cp" существует оригинальный способ копирования через пайпы (pipes):
cd /
tar -cf - | tar -C -xf -
Команда скопирует каталог в каталог . Этот способ очень полезен при копировании больших объемов данных. При необходимости можно добавить и архивацию ключиком "-z" или "-j":
tar -czf - | tar -C -xzf -
Этот рецепт можно немного дополнить. При необходимости передачи файлов по сети из локальной машины на удаленную можно использовать следующую конструкцию:
cd /
tar czf - | ssh tar xzf - -C
В результате получился некий аналог scp.
X Forwarding
Полезная и простая фича. Если нужно запустить на удаленной машине что-то, требующее X'ы, добавляем к стандартной команде ssh пару ключиков:
ssh -X -Y
и спокойно запускаем графические приложения на удаленной машине remote_box.
Поиск дублирующихся файлов fdupes (app-misc/fdupes в gentoo portages) - очень полезно на разного рода файлопомойках...
Проверка работы регулярного выражения
echo "somestring" | egrep "regexp" && echo "true" || echo "false"
Комментариев нет:
Отправить комментарий