[ Content | View menu ]

Организация рабочих файлов по неделям

Опубликовано 28.04.2008

Ежедневно в моей рабочей папке появлялось от одного до полутора десятков и более файлов — документов, патчей, скриптов, отчётов и прочих продуктов рабочей деятельности. Однажды настал момент, когда найти нужный файл среди этого бардака стало довольно затруднительно, и чаша моего терпения переполнилась. Файлы нужно каким-нибудь организовать, подумал я. Изобретать систему меток для организации файлов по фэн-шую GTD было лень, поэтому я просто остановился на принципе «одна неделя — одна папка», т.е. все файлы хранятся в папках вида ~/work/week18, к текущей и предыдущей неделе можно обратиться по ссылкам ~/work/current и ~/work/prev.

Для начала я соорудил скрипт для раскидывания файлов по папкам, создающий в текущей директории папки с именами в нужном формате, если их не существует, и перемещающий туда файлы:

#!/usr/bin/perl -w
use File::stat;
use POSIX qw(strftime);
use strict;
foreach(`find . -maxdepth 1 -type f |sed 's/\ /\\ /g;'`){
    chomp;
    my $st=stat($_)||die "Could not stat $_: $!\n";
    my $week=strftime("%W",localtime($st->mtime));
    unless(-d "week$week"){mkdir "week$week";}
    rename("$_","week$week/$_")||warn "Could not rename $_ to week$week/$_: $!\n";
}

Затем создал скриптик для еженедельного создания новой папки и переименования ссылок current и prev:

#!/bin/sh
current_week=week`/bin/date "+%W"`
test -L ~/work/prev && rm ~/work/prev
mkdir -p ~/work/$current_week
pushd ~/work
test -L current && /bin/mv current prev
ln -s $current_week current
popd

Запуск скриптика в первый день каждой недели (нулевой — воскресение, по американским традициям) поместил в свой crontab (если кто еще не в курсе, у каждого пользователя есть свой crontab, аналогичный общесистемному /etc/crontab; редактируется с помощью команды crontab -e, просматривается командой crontab -l; подробнее см. man 1 crontab):

# crontab -l
1   0   *   *   1   ~/bin/weekly.sh

Ссылки на ~/work/current и ~/work/prev впоследствии была добавлены в в favorite folders в Gnome, а также во все места, где требуется быстрый доступ к рабочим материалам. Кроме того, в начале каждой новой недели при написании еженедельного отчета стало на порядок проще делать обзор работы за предыдущую неделю (конечно, список рабочих активностей не исчерпывается появившимися файлами; есть же еще и почта, и bug-tracker, и другие средства организации информации)Недостаток у данного скрипта пока один — нужно ежегодно архивировать накопившиеся 52 папки, иначе снова возникнет бардак :) Но и это исправляется при наличии желания и умения.

«
»

8 комментариев

Write a comment - TrackBack - RSS Comments

  1. Comment by Dr.AKULAvich:

    Интересный скрипт. Приобщим к делу :)

    28.04.2008 @ 22:53
  2. Comment by Lana_S:

    уважуха!

    02.05.2008 @ 10:31
  3. Comment by Alex:

    Очень проникся этой идеей, но в моём случае не всё так радужно,
    Я использую для хранения всевозможных файлов NAS (http://knol.google.com/k/alex-ander/nas-d-link-dna-313/3rlauyc1j13rx/1#) всё это дело крутиться под линукс, но раздел под хранение файлов в ntfs (такие правила от вендора) и получается что приём с символическими линками не прокатит, я для себя придумал такую схему: в 00.01 каждого ПН крон выполняет скрипт в котором каталог prev переименовывается в weekXX curr в prev и создаётся новый curr. Грабли в том что я не понимаю как вычислить в bash номер недели которая была две недели назад (что бы prev переименовать в weekXX), если не затруднит, помогите разобраться.

    24.01.2010 @ 23:16
  4. Comment by bappoy:

    Например, так:

    date --date '2 weeks ago' +"%V"

    Для 25 января выдаёт правильную вторую неделю.

    25.01.2010 @ 13:43
  5. Comment by Alex:

    Очень просто и элегантный способ, но дело в том, что в этой встроенной системе используется busybox и его встроенная подпрограмма date не может принять такой ключик, вообще у неё очень ограниченный набор возможностей

    25.01.2010 @ 17:46
  6. Comment by bappoy:

    Если из используемой версии busybox не выпилили awk, то можно попробовать так:
    echo |awk ‘{print

    strftime("%V",systime()-86400*14)}'
    25.01.2010 @ 23:16
  7. Comment by Alex:

    Не получилось по вашему рецепту, пришлось городить… в итоге вот что получилось у меня,

    #!/bin/sh
    
    work_path=/mnt/HD_a2/Work/
    prev_path=${work_path}Previous
    curr_path=${work_path}Current
    
    old_week=$(($(/bin/date +%V) - 1))
    
    test "$old_week" -lt "10" && old_week="0${old_week}"
    week_path=${work_path}Week.${old_week}
    
    test -e "${prev_path}" && mv $prev_path $week_path
    test -e "${curr_path}" && mv $curr_path $prev_path
    test -e "${curr_path}" || mkdir -p "$curr_path"

    Скажите как человек опытный, человеку не опытному, я так и не понял, что мне выводит программка date, на стене висит календарь, ясно написано 5-ая неделя, в консоли вижу 04 ??? не понял в чём дело, как итог просто вычел из номера недели 1 а не 2 как планировал.

    26.01.2010 @ 01:12
  8. Comment by bappoy:

    на самом деле сейчас четвертая неделя, так что настенный календарь врёт :) Дело в том, что по европейским стандартам первой неделей года считается та, куда входит как минимум четыре дня (т.е. которая содержит четверг), а по американским — тупо та, которая содержит первый день года, даже если это воскресение. Поэтому нумерация недель 2010 года у нас и у американцев не совпадает.

    Подробнее о номерах недель можно узнать тут.

    Кстати, наши маркетологи в этом году тоже проштрафились: выпустили календарь с неправильной нумерацией недель, так что это весьма распространённое явление.

    26.01.2010 @ 10:38
Write comment

Я не робот.