Skip to content

wijet/cleaner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cleaner Build Status


Tool for automatic management of directories on your disk with simple DSL. Inspired by Hazel app.

Installation

$ gem install cleaner

Example configuration file

manage '~/Downloads' do
  # Move avi's and audio files to right places
  move :avi, :to => '~/Movies/inbox'
  move %w(mp3 ogg), :to => '~/Music/inbox'

  # label all files bigger than 100MB with red color (OS X only)
  label :color => :red, :bigger_than => 100.megabytes

  # Remove zip files if file without zip extension exists (uncompressed files)
  delete :zip, :if => proc { |file| File.exists?(file.path_without_ext) }

  # Move all VAT invoices to a special place
  move :pdf, :if => proc { |file| file.name =~ /VAT/ }, :to => '~/Documents/invoices'

  # You've probably installed it already
  delete :dmg, :after => 10.hours

  # Delete everything older than 1 month.
  # Was here for so long? Doesn't deserve to exist!
  delete :after => 1.month
end

Usage

Generate sample configuration file (~/.cleaner.rb)

$ cleaner init

Run cleaner in the background. By default it will run every 1 hour.

$ cleaner start

You can specify cleaning interval with "rails like" syntax: 20.minutes, 4.hours, 1.day

$ cleaner start 4.hours

Stop cleaner daemon

$ cleaner stop

Available actions

  • Deleting files

    delete :zip
  • Moving files

    move :pdf, :to => '~/Documents/pdfs'
  • Copying files

    copy :mp3, :to => '~/Documents/audio'
  • Labeling files with colors (OS X only). Available colors: :white, :orange, :red, :yellow, :blue, :purple, :green, :gray

    label :txt, :color => :blue

Available conditions

Conditions are used for more accurate files matching.

  • :after - Matches files created given period time ago

    :after => 2.days
  • :if - Matches file for which block returns true. File object is passed to the block.

    :if => proc { |file| file.name =~ /foo/ }
  • :smaller_than - Matches files which are smaller than the given value

    :smaller_than => 10.megabytes
  • :bigger_than - Matches files which are bigger than the given value

    :bigger_than => 1.megabyte

Third party actions

  • Subtitles - Fetching polish subtitles for movies

Writing own actions

New actions can be added easily. All you need to do is implement #execute method.

Useful methods when implementing own actions:

  • #files - array of filtered file paths
  • #options - hash of options passed to action
# Here as example is label action which sets color label on files on OS X
module Cleaner
  module Actions
    class Label < Action
      COLORS = {
        :white  => 0,
        :orange => 1,
        :red    => 2,
        :yellow => 3,
        :blue   => 4,
        :purple => 5,
        :green  => 6,
        :gray   => 7,
      }
      def execute
        code = COLORS[options[:color]]
        files.each do |path|
          script = %Q{tell application \\"Finder\\" to set label index of file (POSIX file \\"#{path}\\") to #{code}}
          `osascript -e "#{script}"`
        end
      end
    end
  end
end

Using custom action

Require action in your config file and use it as any other action.

require 'label.rb'
manage '/add-more-colors-to-your-files' do
  # all avi files are labeled with green color
  label :avi, :color => :green
  # all files bigger than 100 megabytes are labeled with red color
  label :color => :red, :if => proc { |file| file.size > 100.megabytes }
end

Contributions

To fetch & test the library for development, do:

$ git clone https://github.com/wijet/cleaner
$ cd cleaner
$ bundle
$ bundle exec rspec

If you want to contribute, please:

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Send me a pull request on Github.

About

Tool for cleaning up your directories with friendly DSL

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages