Быстрое переименование файла в bash

Хотя почему переименование? Можно использовать в любых ситуациях. Надо сделать резервную копию файла? Или переименовать, добавив всего пару символов? Не нужно жать табы и править имя файла, лучше поступить так:

# вместо
cp very_long_filename.txt very_long_filename.txt.bak
# пишем
cp very_long_filename.txt{,.bak}

Пример в цикле:

for i in {001..100}
do
  … какие-то действия …
  mv output{,_${i}}.jpg
done

Получаем файлы output_001.jpg, output_002.jpg, …, output_099.jpg, output_100.jpg. Если не нужны лидирующие нули, то for i in {1..100}.

Как смонтировать Яндекс.Диск в Ubuntu

mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk/

Если включена двухфакторная аутентификация, необходимо заранее запастись постоянным паролем для приложения.

Более точный sleep через read

В источнике всё описано достаточно подробно, поэтому я просто выложу результаты тестов, они говорят сами за себя:

$ time for ((i=0; i<10000; i++)); do /bin/sleep 0.0001; done

real 0m43.498s
user 0m2.904s
sys 0m10.809s

$ time for ((i=0; i<10000; i++)); do read -t 0.0001; done

real 0m9.148s
user 0m0.392s
sys 0m2.808s

PS. Конечно, есть и builtin sleep, но редко бывает разрешён по умолчанию. Да и работает, согласно источнику, всё равно медленнее (хоть и не намного).

Использование apktool

В статье про изготовление копий приложений для Android я упоминал о приложении SmartAPKTool. Оно может распаковывать, запаковывать и подписывать изменённые apk-файлы. Её достоинством является наличие графического интерфейса. Однако есть и серьёзный недостаток. SmartAPKTool давно не обновлялся, и программа некорректно распаковывает и запаковывает приложения для свежих версий Android. Поэтому здесь я попытаюсь объяснить, как пользоваться для этих целей приложением apktool. Читать далее Использование apktool

Склейка VOB файлов в один

Зачем перекодировать DVD в какие-то другие форматы, если можно просто склеить видеофайлы в один?
В командной строке Windows это делается так:

:: Назначаем выходной файл
SET OUT=output.VOB
:: Создаём пустой выходной файл
copy nul %OUT%
:: Ключ /B означает бинарный режим, без него не заработает
FOR %I IN (*.VOB) DO copy /B %OUT% + %I %OUT%

Вместо * могут быть другие подстановочные символы, формирующие ваше условие.

В Linux это делается так:

for a in *.VOB
do
cat "$a" &gt;&gt; output.VOB
done

Пароль mysql в командной строке

Чтобы безопасно не интерактивно передавать пароль (а попутно и другие данные) в mysql, нужно поступить так.

  1. Создаём файл в недоступной по http директории; в примере назовём его def.cnf
  2. Добавляем в него такие строки:
    [client]
    user = имя_пользователя
    password = пароль
    host = хост_бд
    [mysql]
    database = имя_бд

    (Можно дополнить файл и другими директивами.)

  3. Даём файлу минимальные права, например 400 или 600.
  4. Используем вместо такой записи
    mysql --host=хост_бд \
    --user=имя_пользователя \
    --password=пароль имя_бд \
    --execute="SELECT NOW();"

    такую:

    mysql --defaults-extra-file="/path/def.cnf" \
    --execute="SELECT NOW();"

    Важно: --defaults-extra-file должен быть первым ключом.

  5. Хинт. Добавляем путь к файлу def.cnf в переменную окружения, и нам больше не нужно вводить его при наборе команды, например:
    mysql --defaults-extra-file=$DEF \
    --execute="SELECT NOW();"

По материалам man mysqld_safe и http://www.opennet.ru/tips/info/1313.shtml

Считывание переменных из файла в Bash

Вместо

for var in $(cat file.txt) # или for var in `cat file.txt`
do

done

можно (и часто удобнее) использовать

cat file.txt | while read var
do

done

Особенности:

1. Во втором варианте применение пайпа изменяет область видимости переменных. В приведённом примере за пределами цикла while переменная var не будет видна, т.к. она выполняется в новом процессе.

2. При использовании варианта с пайпом (вариант 2) в переменную будет писаться вся строка, даже если в ней есть пробельные символы. Такое же поведение в варианте 1 можно спровоцировать, установив переменную окружения IFS=" " (равной пробелу; хотя на своём опыте я убедился, что использование в качестве разделителя пробельных символов может повлечь за собой массу неудобств).