-
-
Save jamiew/138997 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# sup luke; jdubs here | |
# - put the docs and helper scripts inline for syntax highlighting joy | |
# - added another crontab example -- I like to file once/day. | |
# plays nice with treating the Desktop like a daily scratchpad | |
# - added a 'Yesterday' link in addition to Today | |
# - minor tweaks around town | |
## config | |
HOME_DIRECTORY = "~" # this will | |
DESKTOP_DIRECTORY = "#{HOME_DIRECTORY}/Desktop" | |
STORAGE_DIRECTORY = "#{HOME_DIRECTORY}/Documents" | |
LOG_DIRECTORY = "#{HOME_DIRECTORY}/.bin" | |
SHELL = "/bin/bash" | |
## docs | |
=begin | |
drefile: an automatic, chronological file organizer | |
--------------------------------------------------- | |
Every few minutes drefile copies all files on your Desktop to a folder | |
such as ~/Documents/2009-06-June/26-Friday, prepending a timestamp | |
(like 20090626.1310) to the filename. | |
Use | |
--- | |
1. Put files on your Desktop, and in a few minutes they will be 'drefiled' | |
2. Use the 'Today' alias on your Desktop to go to today's folder | |
3. Type 'dday' to go to today's directory | |
4. Type 'dmonth' to go to this month's directory | |
5. Type 'drefile file' to manually timestamp + move a file | |
Install | |
------- | |
1. `sudo port install osxutils` | |
2. `sudo gem install open4` | |
3. copy the 3 files below to ~/.bin (or whatever, in your path) | |
4. `chmod +x` the 3 files | |
5. `crontab -e` this (as your user): | |
# drefile desktop every 5 minutes (on the 5) | |
0,5,10,15,20,25,30,35,40,45,50,55 * * * * ~/.bin/drefile >> /Users/luke/.bin/drefile_cron.log | |
# drefile desktop once/day (at 5am) | |
* 5 * * * ~/.bin/drefile >> /Users/luke/.bin/drefile_cron.log | |
dday.rb | |
------- | |
#!/usr/bin/env ruby | |
require "fileutils" | |
month_and_day = Time.now.strftime("%Y-%m-%B/%d-%A") | |
dir = "/Users/luke/Documents/#{month_and_day}" | |
FileUtils.mkdir_p dir | |
puts "cd #{dir}" | |
dmonth.rb | |
--------- | |
#!/usr/bin/env ruby | |
require "fileutils" | |
month = Time.now.strftime("%Y-%m-%B") | |
dir = "/Users/luke/Documents/#{month}" | |
FileUtils.mkdir_p dir | |
puts "cd #{dir}" | |
drefile.rb | |
------- | |
=end | |
require 'rubygems' | |
require 'open4' | |
require 'logger' | |
require "fileutils" | |
require 'time' | |
if ARGV.length == 0 | |
# make the drefile dir | |
month_and_day = Time.now.strftime("%Y-%m-%B/%d-%A") | |
drefile_directory = "#{STORAGE_DIRECTORY}/#{month_and_day}" | |
FileUtils.mkdir_p(drefile_directory) | |
#timestamp_prefix = Time.now.strftime("%Y%m%d.%H%M")+' ' | |
timestamp_prefix = '' #i don't like the prefixes, just the directories | |
# remove the today alias | |
FileUtils.rm("#{DESKTOP_DIRECTORY}/Today") if File.exists?("#{DESKTOP_DIRECTORY}/Today") | |
# move files with a datetime prefix | |
Dir.entries(DESKTOP_DIRECTORY).reject{|f| f =~ /^\./}.each do |file_name| | |
FileUtils.mv("#{DESKTOP_DIRECTORY}/#{file_name}", "#{drefile_directory}/#{timestamp_prefix}#{file_name}") | |
end | |
# remake the today alias | |
`/opt/local/bin/mkalias -r "#{drefile_directory}" "#{HOME_DIRECTORY}/Desktop/Today"` | |
else | |
# make the drefile dir | |
timestamp = Time.parse(Open4.open4("mdls -name kMDItemFSCreationDate -raw #{ARGV.first}")[2].read) | |
drefile_directory = "#{STORAGE_DIRECTORY}/#{timestamp.strftime("%Y-%m-%B/%d-%A")}" | |
FileUtils.mkdir_p(drefile_directory) | |
new_file = "#{drefile_directory}/#{timestamp.strftime("%Y%m%d.%H%M")} #{ARGV.first}" | |
FileUtils.mv(ARGV.first, new_file) | |
puts new_file | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment