22 Фев

Хитрости bash

Снова сегодня обнаружил в bash’е шикарные команды.
Расскажу один случай.
Не так давно я писал скрипт для автоматизации настроек новых серверов для chatroulette.com. Одной из задач было написать команду, которая создает некоторую структуру директорий для кеша проекта. А именно, скрипт/команда должна в определенной директории создать директории с именами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и в каждой из них тоже по 10 директорий с этими же именами (0-9).
На тот момент я сделал 3-4 варианта скрипта и остановился вот на таком:

for dir0 in `seq 0 9`; do mkdir /www/$dir0 && for dir1 in `seq 0 9`; do mkdir /www/$dir0/$dir1; done; done

Вобщем-то, в этой задаче самое хитрое — придумать кратчайший способ создания директорий от 0 до 9. В данном примере для создания директорий я воспользовался секвенцией seq. Сегодня я нашел куда более простой и понятный для этого способ. И так, показываю сразу новый вариант:

mkdir {0..9} && for dir in *; do mkdir $dir/{0..9}; done

Команда mkdir {n..m} создает директории с диапазоном имен от n до m.
В итоге, команда нехило сократилась и стала на порядок понятней даже новичкам.

UPD: Спасибо @sany, подсказал еще один шикарный способ, который, будучи очевидным, мне в голову даже не пришел :)

mkdir -p {0..9}/{0..9}
09 Фев

Конвертируем MP3->GSM

Всe звуковые файлы asterisk’а находятся в формате *.gsm, *.alaw либо *.ulaw. По большей части, это *.gsm.
Как в него конвертануть *.mp3 или *.wav?

Для WAV достаточно установить пакет sox и ввести,:

$sox file1.wav -r 8000 -c1 file2.gsm

С mp3 немного сложнее, но тоже никаких проблем. Помимо sox ставим mpg123 и небольшой скриптик в помощь:

 #!/bin/bash

for file in $(ls -1 *.mp3)
do
NAME=$file
echo "Converting from mp3.wav"
mpg123 -w "$NAME.wav" "$NAME"
echo "Converting from wav to gsm"
sox -t wav "$NAME.wav" -r 8000 -c1 -t gsm "$NAME.gsm"
echo "output filename: $NAME.gsm"
done

Это скрипт для конвертации всех mp3-файлов в текущей директории.

26 Авг

Wallpapers changer

Только что знакомому настрочил небольшой скрипт, который достаточно засунуть в cron и он переодически сменит обоину на десктопе. Не знаю, для чего такие заморочки, но его дело. Привожу элементарный скрипт на bash’е (почему-то, в дебиане не заработал, его bash не знает про shuf O_o)

 #!/bin/bash
DIR=адрес_директории_с_картинками
cd "$DIR"
cp `ls | shuf | head -n1` ~/images/Wallpaper.jpg
feh --bg-scale ~/images/Wallpaper.jpg