Быстрое переименование файла в 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/

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

Как переназначить кнопки dpi в Linux (на примере мыши MX1100)

Давно пользуюсь многокнопочной мышью Logitech MX1100. В Windows на отдельные её кнопки настроены различные сочетания клавиш, это позволяет сделать стандартное ПО SetPoint. К сожалению, Logitech не выпускает этой программы под Linux. Читать далее Как переназначить кнопки dpi в Linux (на примере мыши MX1100)

Сохранение истории bash после перезагрузки

Чтобы файл ~/.bash_history не был пустым после перезагрузки, нужно всего лишь изменить его права:

$ sudo chmod 777 ~/.bash_history

Или ещё лучше так:

$ sudo chown username:root ~/.bash_history

где username — имя вашего пользователя.

Рассылка email из таблиц Google одним кликом

По работе понадобилось рассылать сотрудникам письма исходя из данных таблицы. Как это произвести в один клик, хоть массово, хоть адресно? С помощью скрипта Google по такой схеме:

  1. Имеем таблицу с email-адресами и данными для отправки.
  2. Создаём скрипт Google, рассылающий письма на адреса из выделенных ячеек.
  3. Ставим в документ кнопку, при нажатии на которую этот скрипт срабатывает.

Более подробно по пунктам

Gesundheit! (Будь здоров!) Игра для iOS и Android

«Gesundheit!» (гезундхайт, «Будь здоров!» по-немецки) поразила меня великолепным оформлением, отличным звуковым сопровождением и сочетанием нескольких игровых жанров. Читать далее Gesundheit! (Будь здоров!) Игра для iOS и Android

Более точный 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

Очистка поля типа file на javascript

В большинстве современных версий браузеров убрана возможность вручную редактировать поля для загрузки файлов на сервер. А это иногда бывает нужно, например, если вы ошибочно добавили не тот файл. Решений этой проблемы масса, но все они мне не подошли (использование jQuery; очистка кнопкой reset, которая удаляет все данные из формы и тому подобное).

Нужное мне решение было найдено здесь. В общем случае можно очищать любые поля формы.

<script lang="javascript" type="text/javascript">
function clearFileUpload(id) {
// Получаем элемент по id
fileField = document.getElementById(id);
// Получаем родительский элемент
parentNod = fileField.parentNode;
// Создаём новый элемент
tmpForm = document.createElement("form");
parentNod.replaceChild(tmpForm,fileField);
tmpForm.appendChild(fileField);
tmpForm.reset();
parentNod.replaceChild(fileField,tmpForm);
}
</script>
[…]
<!-- Эта кнопка очищает два поля с указанными id -->
<input onclick="clearFileUpload('field1_id'); clearFileUpload('field2_id');" value="X" type="button">
[…]

Проверено в Chrome 30 и старой версии Opera 12.16