Заметки за октябрь 2010 года

Поиск файлов из командной строки

Главным инструментом для поиска файлов служит утилита find. Она имеет множество параметров, которые позволяют задавать различные условия.

Поиск по имени файла

find ~ -name 'article.doc'
  • ~

    домашняя папка пользователя в качестве начального пути для поиска

  • -name

    поиск по имени файла

Так же можно делать поиск по части имени

find ~ -name 'article.*'
find ~ -name '*.doc'

У параметра name есть альтернатива iname — игнорирование регистра символов.

Поиск по дате и времени

У файлов учитывается время создания (create), доступа (access) и изменения (modification). Соответственно параметры поиска начинаются с первых букв соответствующих английских слов.

find . -amin -30

Ищем файлы в текущей папке, которые открывались менее 30 минут назад.

find . -ctime -2h

Ищем файлы в текущей папке, время создания которых отличается от текущего на 2 часа.

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

Поиск по размеру

find . -size +10M

Эта команда выдаст список файлов, размер которых больше 10 мегабайт.

find . -size -10k

А эта — список файлов, размер которых меньше 10 килобайт.

Поиск по содержимому файла

Утилита find сама не осуществляет поиск по содержимому, но ее можно использовать, чтобы задать другие граничные условия поиска. А внутри файла можно найти строку с помощью утилиты grep.

Найдем файлы в домашней папке пользователя, размер которых меньше 10 килобайт и содержащих строку «hello»

find ~ -size -10k -print0 | xargs -0 grep "hello"
  • -print0

    имена файлов будет разделены символом \0

  • xargs

    специальная утилита, которая получает из стандартного ввода набор строк и передает их в качестве аргументов следующей утилите (в нашем случае утилите grep)

  • -0

    строки разделены символом \0

Подробнее о параметрах

Все параметры и их значения можно узнать из документации по соответствующим утилитам

Комментарии к заметке: 3

Чистим информацию о ветках в Git

Если вы работаете в команде, любой член команды может создавать и загружать свои собственные ветки, которые будут получены с сервера Git во время git pull или git fetch. Если ветка будет удалена с сервера, она останется в вашем локальном репозитории навсегда. Для удаления таких веток используется команда:

git remote prune origin
Оставте свой комментарий

Определение браузера

Когда я искал материал для статьи «Обнаружение браузера Opera 9», то наткнулся на интересный тест браузеров, выполненный исключительно на CSS, — http://www.brunildo.org/test/csshacks3.html.

Этот тест успешно определяет версию IE, версию Firefox ниже 3.0 (Gecko <1.9) и 3.x (Gecko 1.9). Однако определение версий Webkit и Opera в нем нет.

Другие тесты и эксперименты.

Оставте свой комментарий

Порядок элементов виджета Sortable

У виджета jQuery Sortable помимо метода serialize есть еще другой метод, который можно использовать для сохранения порядка сортировки элементов, — toArray. Его отличие заключается в том, что он возвращает массив id элементов, а не просто строку.

<ul id="search-engines">
  <li id="item-1">Яндекс</li>
  <li id="item-3">Bing </li>
  <li id="item-2">Google</li>
</ul>

Получаем массив

var engines = $("#search-engines").sortable("toArray");

В результате в переменной engines будет массив ["item-1", "item-3", "item-2"].

toArray будет полезен, скорее всего, в ситуациях, когда требуется пост-обработка данных (например, фильтрация или переименование ключей) перед сохранением.

Комментарии к заметке: 2

Обнаружение браузера Opera 9

Совсем недавно я начал применять web-шрифты в реальных проектах. Благодаря простым утилитам (например, @font-face Generator) можно быстро сконвертировать шрифт в нужные форматы. Но статья совсем не о том. Эти web-шрифты прекрасно (если не брать во внимание проблемы со сглаживанием) отображаются во всех браузерах (даже в IE6!!!) кроме Opera версии 9 и ниже. В связи с эти фактом я и озадачился методами обнаружения Opera 9.

Очевидным способом является проверка строчки User-Agent. Этот вариант решения проблемы хорош до тех пор, пока не сталкиваешься с подменой строки.

С другой стороны проверить тип браузера и его версию можно через определение возможностей (feature detection). В этом случае, как правило, проверяют хорошо известные дефекты или специфическое поведение браузера в тех или иных ситуациях.

Так для браузеров Opera до 10 версии будет характерным отличительным признаком отсутствие события contextmenu у DOM-элемента.

function () {
  var isPresent = null;
  if (document.createElement) {
    var el = document.createElement("p");
    if (el && el.setAttribute) {
      el.setAttribute("oncontextmenu", "");
      isPresent = typeof el.oncontextmenu != "undefined";
    }
  }
  return isPresent;
}

Обнаружение такой не очевидной особенности гораздо эффективнее, например, по сравнению с обнаружением поддержки web-шрифтов потому, что шрифту придется загрузить по сети.

Так же, наверное, можно использовать какие-то CSS-хаки, специфичные для Opera, по аналогии с тем, как я делал определение IE6.

Оставте свой комментарий