Cody
June 15, 2004, 5:53pm
#1
I decide to try to write the script in this thread recursively, but I am getting errors in the recursive calls. Can anyone help out?
Also: Would this work on 9?
EDIT: The problem actually lies in folders that have only one file. That file does not come back in a list, and thus can’t be coerced into an alias list… Hmmm…
set thedate to (get current date )
set filename to "Trashlog " & (year of thedate as string ) & “-” & (month of thedate as string ) & “-” & (day of thedate as string )
set folder_ to choose folder with prompt “Select a folder to index.”
set output_ to choose file name with prompt “Choose a name and location for the log.” default name filename
try
set file_ref to open for access output_ with write permission
writeindex (folder_ , file_ref )
on error e
display dialog e
try
close access file_ref
end try
end try
try
close access file_ref
end try
on writeindex (folder_ , file_ref )
tell application “Finder”
set files_ to files of folder_ as alias list
set folders_ to folders of folder_ as alias list
[b][color=blue]set[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] ""
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]file_[/color] [b][color=blue]in[/color][/b] [color=green]files_[/color]
[b][color=blue]set[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] [color=green]names_[/color] & (([color=blue]physical size[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]integer[/color]) & [color=blue]tab[/color] & ([color=blue]modification date[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]string[/color]) & [color=blue]tab[/color] & [color=blue]name[/color] [b][color=blue]of[/color][/b] ([color=blue]info for[/color] [color=green]file_[/color]) & [color=blue]return[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]set[/color][/b] [color=green]sublist[/color] [b][color=blue]to[/color][/b] ""
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]sub[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[b][color=blue]set[/color][/b] [color=green]sublist[/color] [b][color=blue]to[/color][/b] [color=green]sublist[/color] & ([color=blue]name[/color] [b][color=blue]of[/color][/b] ([color=blue]info for[/color] [color=green]sub[/color]) & [color=blue]return[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]end[/color][/b] [b][color=blue]tell[/color][/b]
[color=blue]write[/color] ("Contents of " & ([color=green]folder_[/color] [b][color=blue]as[/color][/b] [color=blue]string[/color]) & [color=blue]return[/color]) [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[color=blue]write[/color] [color=green]names_[/color] [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[color=blue]write[/color] ([color=blue]return[/color] & "Subfolders:" & [color=blue]return[/color]) [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[color=blue]write[/color] ([color=green]sublist[/color] & [color=blue]return[/color]) [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[b][color=blue]if[/color][/b] [color=blue]number[/color] [b][color=blue]of[/color][/b] [color=blue]items[/color] [b][color=blue]of[/color][/b] [color=green]folders_[/color] > 0 [b][color=blue]then[/color][/b]
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]nextfolder[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[color=green]writeindex[/color]([color=green]nextfolder[/color], [color=green]file_ref[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]end[/color][/b] [b][color=blue]if[/color][/b]
end writeindex
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code ]
jonn8
June 15, 2004, 6:43pm
#2
This is a known bug. Try changing:
set files_ to files of folder_ as alias list
set folders_ to folders of folder_ as alias list
to
set files_ to (get files of folder_)
set folders_ to (ge folders of folder_)
Jon
Cody
June 15, 2004, 6:46pm
#3
Still doesn’t seem to work
How does this do?
try
set files_ to every file of folder_ as alias list
on error
try
set files_ to file 1 of folder as alias as list
on error
set files_ to {} --> check later to see if there were any files
end
end
jonn8
June 15, 2004, 7:15pm
#5
On my machine, sublist is a reserved word (some conflict with a scripting addition) so I’ve changed that. I’ve also tried not to use the “info for” command since you’re using the Finder for this mostly except that for some package files, the Finder balks at returning the size. I also don’t like the idea of having a file open while processing lots of files and then writing to it, I prefer to open, write, close. It’s also a bit faster to append to the end of lists instead of creating long strings and you can be a bit smarter if there aren’t actually subfolders. So, with all of that, this works for me:
–Open this script in a new Script Editor window.
set theDate to (current date )
set filename to "Trashlog " & (theDate ’s year ) & “-” & (theDate ’s month ) & “-” & (theDate ’s day ) & “.txt”
my writeindex (choose folder with prompt “Select a folder to index:”, choose file name with prompt “Save the log as:” default name filename )
display dialog “Done.” buttons {“OK”} default button 1 with icon 1 giving up after 10
on writeindex (folder_ , output_ )
tell application “Finder”
set files_ to (get files of folder_ )
set folders_ to (get folders of folder_ )
[b][color=blue]set[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] {}
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]file_[/color] [b][color=blue]in[/color][/b] [color=green]files_[/color]
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] ([color=blue]physical size[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]integer[/color])
[b][color=blue]on[/color][/b] [b][color=blue]error[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] ([color=blue]size[/color] [b][color=blue]of[/color][/b] ([color=blue]info for[/color] ([color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]alias[/color])) [b][color=blue]as[/color][/b] [color=blue]integer[/color])
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]end[/color][/b] [b][color=blue]of[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] {[color=green]s[/color], [color=blue]tab[/color], ([color=blue]modification date[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color]), [color=blue]tab[/color], ([color=blue]name[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color]), [color=blue]return[/color]}
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]set[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {}
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]sub[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[b][color=blue]set[/color][/b] [b][color=blue]end[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] (([color=blue]name[/color] [b][color=blue]of[/color][/b] [color=green]sub[/color]) & [color=blue]return[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]if[/color][/b] [color=green]sublist_[/color] [b][color=blue]is[/color][/b] [b][color=blue]not[/color][/b] {} [b][color=blue]then[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]beginning[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {"Subfolders:", [color=blue]return[/color]}
[b][color=blue]else[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]beginning[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {"No Subfolders", [color=blue]return[/color]}
[b][color=blue]end[/color][/b] [b][color=blue]if[/color][/b]
[b][color=blue]end[/color][/b] [b][color=blue]tell[/color][/b]
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]file_ref[/color] [b][color=blue]to[/color][/b] [color=blue]open for access[/color] [color=green]output_[/color] [b][color=blue]with[/color][/b] [color=blue]write permission[/color]
[color=blue]write[/color] ("Contents of " & [color=green]folder_[/color] & [color=blue]return[/color] & [color=green]names_[/color] & [color=blue]return[/color] & [color=green]sublist_[/color] & [color=blue]return[/color] & [color=blue]return[/color]) [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[color=blue]close access[/color] [color=green]file_ref[/color]
[b][color=blue]on[/color][/b] [b][color=blue]error[/color][/b] [color=green]e[/color]
[b][color=blue]try[/color][/b]
[color=blue]close access[/color] [color=green]file_ref[/color]
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[color=blue]display dialog[/color] [color=green]e[/color] [color=blue]buttons[/color] {"Cancel", "OK"} [color=blue]default button[/color] 2 [color=blue]with icon[/color] 0
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]nextfolder[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[b][color=blue]my[/color][/b] [color=green]writeindex[/color]([color=green]nextfolder[/color], [color=green]output_[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
end writeindex
Jon
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code ]
Cody
June 15, 2004, 7:45pm
#6
Jon – Thanks, that runs a bit quicker. I’ve also added an if statement for extra tabs to space it out more neatly when there are very big files, or short dates:
set theDate to (current date )
set filename to "Trashlog " & (theDate ’s year ) & “-” & (theDate ’s month ) & “-” & (theDate ’s day ) & “.txt”
my writeindex (choose folder with prompt “Select a folder to index:”, choose file name with prompt “Save the log as:” default name filename )
display dialog “Done.” buttons {“OK”} default button 1 with icon 1 giving up after 10
on writeindex (folder_ , output_ )
tell application “Finder”
set files_ to (get files of folder_ )
set folders_ to (get folders of folder_ )
[b][color=blue]set[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] {}
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]file_[/color] [b][color=blue]in[/color][/b] [color=green]files_[/color]
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] ([color=blue]physical size[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]integer[/color])
[b][color=blue]on[/color][/b] [b][color=blue]error[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] ([color=blue]size[/color] [b][color=blue]of[/color][/b] ([color=blue]info for[/color] ([color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]alias[/color])) [b][color=blue]as[/color][/b] [color=blue]integer[/color])
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]if[/color][/b] [color=green]s[/color] < 10000000 [b][color=blue]then[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] (([color=green]s[/color] [b][color=blue]as[/color][/b] [color=blue]string[/color]) & [color=blue]tab[/color])
[b][color=blue]else[/color][/b]
[b][color=blue]set[/color][/b] [color=green]s[/color] [b][color=blue]to[/color][/b] [color=green]s[/color] [b][color=blue]as[/color][/b] [color=blue]string[/color]
[b][color=blue]end[/color][/b] [b][color=blue]if[/color][/b]
[b][color=blue]set[/color][/b] [color=green]theDate[/color] [b][color=blue]to[/color][/b] [color=blue]modification date[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color] [b][color=blue]as[/color][/b] [color=blue]string[/color]
[b][color=blue]if[/color][/b] [color=blue]length[/color] [b][color=blue]of[/color][/b] [color=green]theDate[/color] < 32 [b][color=blue]then[/color][/b]
[b][color=blue]set[/color][/b] [color=green]theDate[/color] [b][color=blue]to[/color][/b] [color=green]theDate[/color] & [color=blue]tab[/color]
[b][color=blue]end[/color][/b] [b][color=blue]if[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]end[/color][/b] [b][color=blue]of[/color][/b] [color=green]names_[/color] [b][color=blue]to[/color][/b] {[color=green]s[/color], [color=blue]tab[/color], [color=green]theDate[/color], [color=blue]tab[/color], ([color=blue]name[/color] [b][color=blue]of[/color][/b] [color=green]file_[/color]), [color=blue]return[/color]}
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]set[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {}
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]sub[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[b][color=blue]set[/color][/b] [b][color=blue]end[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] (([color=blue]name[/color] [b][color=blue]of[/color][/b] [color=green]sub[/color]) & [color=blue]return[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
[b][color=blue]if[/color][/b] [color=green]sublist_[/color] [b][color=blue]is[/color][/b] [b][color=blue]not[/color][/b] {} [b][color=blue]then[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]beginning[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {"Subfolders:", [color=blue]return[/color]}
[b][color=blue]else[/color][/b]
[b][color=blue]set[/color][/b] [b][color=blue]beginning[/color][/b] [b][color=blue]of[/color][/b] [color=green]sublist_[/color] [b][color=blue]to[/color][/b] {"No Subfolders", [color=blue]return[/color]}
[b][color=blue]end[/color][/b] [b][color=blue]if[/color][/b]
[b][color=blue]end[/color][/b] [b][color=blue]tell[/color][/b]
[b][color=blue]try[/color][/b]
[b][color=blue]set[/color][/b] [color=green]file_ref[/color] [b][color=blue]to[/color][/b] [color=blue]open for access[/color] [color=green]output_[/color] [b][color=blue]with[/color][/b] [color=blue]write permission[/color]
[color=blue]write[/color] ("Contents of " & [color=green]folder_[/color] & [color=blue]return[/color] & [color=green]names_[/color] & [color=blue]return[/color] & [color=green]sublist_[/color] & [color=blue]return[/color] & [color=blue]return[/color]) [color=blue]to[/color] [color=green]file_ref[/color] [color=blue]starting at[/color] [color=blue]eof[/color]
[color=blue]close access[/color] [color=green]file_ref[/color]
[b][color=blue]on[/color][/b] [b][color=blue]error[/color][/b] [color=green]e[/color]
[b][color=blue]try[/color][/b]
[color=blue]close access[/color] [color=green]file_ref[/color]
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[color=blue]display dialog[/color] [color=green]e[/color] [color=blue]buttons[/color] {"Cancel", "OK"} [color=blue]default button[/color] 2 [color=blue]with icon[/color] 2
[b][color=blue]end[/color][/b] [b][color=blue]try[/color][/b]
[b][color=blue]repeat[/color][/b] [b][color=blue]with[/color][/b] [color=green]nextfolder[/color] [b][color=blue]in[/color][/b] [color=green]folders_[/color]
[b][color=blue]my[/color][/b] [color=green]writeindex[/color]([color=green]nextfolder[/color], [color=green]output_[/color])
[b][color=blue]end[/color][/b] [b][color=blue]repeat[/color][/b]
end writeindex
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code ]
Cody
June 15, 2004, 8:11pm
#7
Now that that works, I want to know if it’ll run on 9…