Книга: Программирование на языке Ruby

14.8.3. Удаление файлов по времени модификации и другим критериям

14.8.3. Удаление файлов по времени модификации и другим критериям

Предположим, вы хотите удалить самые старые файлы из какого-то каталога. В нем могут, к примеру, храниться временные файлы, протоколы, кэш браузера и т.п.

Ниже представлена небольшая программа, удаляющая файлы, которые в последний раз модифицировались раньше указанного момента (заданного в виде объекта Time):

def delete_older(dir, time)
 Dir.chdir(dir) do
  Dir.foreach(".") do |entry|
   # Каталоги не обрабатываются.
   next if File.stat(entry).directory?
   # Используем время модификации.
   if File.mtime(entry) < time
    File.unlink(entry)
   end
  end
 end
end
delete_older("/tmp",Time.local(2001,3,29,18,38,0))

Неплохо, но можно обобщить. Создадим метод delete_if, который принимает блок, возвращающий значение true или false. И будем удалять те и только те файлы, которые удовлетворяют заданному критерию.

def delete_if(dir)
 Dir.chdir(dir) do
  Dir.foreach(".") do |entry|
   # Каталоги не обрабатываются.
   next if File.stat(entry).directory?
   if yield entry
    File.unlink(entry)
   end
  end
 end
end
# Удалить файлы длиннее 3000 байтов.
delete_if("/tmp") { |f| File.size(f) > 3000 }
# Удалить файлы с расширениями LOG и BAK.
delete_if("/tmp") { |f| f =~ /(log|bak)$/i }

Оглавление книги


Генерация: 1.142. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз