Скрипт для управления датированным пространством в Mac OS X (10.6) для загрузки - PullRequest
0 голосов
/ 06 февраля 2011

Раньше я создавал яблочный скрипт для datedspace , но он больше не работает.

Я хотел бы создать яблочный скрипт, который смотрел бы внутри папки ~/Documents/pool/ или ~/Downloads.

Допустим, мы находимся 7 февраля 2011 года.

  1. Проверьте, существует ли ~/Documents/2011/02/07/
  2. Если не создать ~/Documents/2011/02/07/
  3. Перемещение файлов и / или папок внутри ~/Documents/pool/ в ~/Documents/2011/02/07/

Бонус

  1. Создание текстового файла в ~/Documents/2011/ с именем index.mdown и содержит следующий формат
# Index 2011
## January
[…] 
## February 
* 2011-02-07: Foo.jpeg 
* 2011-02-07: Bar/ 

Приветствуются потенциальные или неполные решения.

Предыдущий сценарий

-- Script to automaticaly save documents in a date space.
-- Karl Dubost - http://www.la-grange.net/ - <karl@*******> - 2001 ©
-- Feel free to distribute it and modify it
-- Feel free to send me improvements 
-- ********************************************************
-- Version 1.1 2001-03-30
--      Add control on existence of folders year and month
--      Make it more general based on Startup Disk
-- Version 1.0 2001-03-29
--      Creation of the code
--      Thanks to Bill Briggs
--      http://maccentral.macworld.com/columns/briggs.shtml
-- ********************************************************
on adding folder items to this_folder after receiving added_items
    tell application "Finder"
        set yourDisk to name of startup disk as string
    end tell
    set todaysDate to (current date)
    set {d, m, y} to {day, month, year} of todaysDate
    set monthList to {January, February, March, April, May, June, ¬
        July, August, September, October, November, December}

    repeat with i from 1 to 12
        if m = (item i of monthList) then
            set monthString to text -2 thru -1 of ("0" & i)
            exit repeat
        end if
    end repeat

    set y to y as string
    set dayString to text -2 thru -1 of ("0" & d)
    set dayString to dayString as string
    set datedFolder to yourDisk & ":Documents:" & y & ":" & monthString & ":" & dayString & ":" as string
    set monthFolder to yourDisk & ":Documents:" & y & ":" & monthString & ":" as string
    set yearFolder to yourDisk & ":Documents:" & y & ":" as string
    set rootFolder to yourDisk & ":Documents:" as string

    tell application "Finder"
        if (folder datedFolder exists) then
            repeat with oneFile in added_items
                move oneFile to folder datedFolder
            end repeat
        else if not (folder yearFolder exists) then
            make new folder at folder rootFolder with properties {name:y}
        else if not (folder monthFolder exists) then
            make new folder at folder yearFolder with properties {name:monthString}
        else
            make new folder at folder monthFolder with properties {name:dayString}
            repeat with oneFile in added_items
                move oneFile to folder datedFolder
            end repeat
        end if
    end tell
end adding folder items to

1 Ответ

2 голосов
/ 07 февраля 2011

Надеюсь, этого будет достаточно :-): С помощью некоторых основных приложений командной строки он создает подпапки в папке ~ / Documents (mkdir -p: он не будет перезаписывать существующие каталоги!), Перемещает туда файлы (mv -n: не перезаписывать файлы с тем же именем), затем создает ежемесячные файлы журналов, содержащие имена добавленных элементов и, наконец, файл index.mdown со всеми ежемесячными файлами журналов, который должен выглядеть следующим образом:

2011/01/03: testfile9
2011/02/01: testfile10
2011/02/07: testfile11

А теперь иди и прикрепи его к своей папке, попробуй! (возможно, раскомментируйте baseFolder и измените его на / tmp / test или что-то еще, или на путь POSIX этого фолдера, если вы хотите, чтобы он очистил папку, к которой он присоединен.)

property dateFormatForFolder : "+%Y/%m/%d"
property dateFormatForMonthlyLog : "+%Y/%m/"
property dateFormatForYearlyLog : "+%Y/"

on adding folder items to thisFolder after receiving addedItems
set baseFolder to POSIX path of (path to documents folder)
set todaysFolder to do shell script "/bin/date '" & dateFormatForFolder & "'"
set monthsFolder to do shell script "/bin/date '" & dateFormatForMonthlyLog & "'"
set yearsFolder to do shell script "/bin/date '" & dateFormatForYearlyLog & "'"
set fullPath to baseFolder & todaysFolder

createFolder(fullPath)

repeat with i from 1 to number of items in addedItems
set oneItemsPath to (quoted form of POSIX path of item i of addedItems)

try
    moveToFolder(fullPath, oneItemsPath)
end try

set fileName to name of (info for item i of addedItems)
set logThis to todaysFolder & ":   " & fileName
do shell script "echo " & logThis & " >> " & baseFolder & monthsFolder & "log.txt"

end repeat

do shell script "find " & baseFolder & yearsFolder & " -type f -name 'log.txt' -print0 | xargs -0 cat > " & baseFolder & yearsFolder & "index.mdown"

end adding folder items to


on createFolder(fullPath)
do shell script "/bin/mkdir -p " & quoted form of fullPath
end createFolder

on moveToFolder(fullPath, oneItemsPath)
do shell script "/bin/mv -n " & oneItemsPath & " " & fullPath
end moveToFolder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...