From: SourceForge.net <no...@so...> - 2008-01-31 16:07:01
|
Feature Requests item #1880980, was opened at 2008-01-28 17:12 Message generated for change (Comment added) made by evil_son You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=1880980&group_id=10894 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: 35. Pathname Management Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Evil Son (evil_son) Assigned to: Vince Darley (vincentdarley) Summary: Option to [glob] to ease recursive traversal Initial Comment: Currently, to traverse a directory hierarchy: in the top directory we need to explicitly glob for all directory entries (including those that start with a period) and then filter out "." and ".." and so on recursively for children directories The following suggested option to [glob] will simplify code as well as provide some speed increase. [glob -walk] will return all directory entries in the current dir including those that start with a period _except_ for "." and ".." i.e it filters out the current and parent directories. Other filters can be stacked on top of it as per usual with [glob] This option does _not_ walk the entire directory tree recursively. As such the name "-walk" may be considered misleading. [glob -walk] essentially provides a filter to a previously suggested option [glob -all]: request id 1880967 at http://sourceforge.net/tracker/index.php?func=detail&aid=1880967&group_id=10894&atid=360894 and may well be used more often than [glob -all] raising doubts about the need for the latter. Checking for recursive links in the filesystem is still the responsibility of the user. e.g usage. To print the names of all and only directories under $root: proc rec-print-dirs {dir} { puts $dir foreach d [glob -walk -directory $dir -types {d}] { rec-print-dirs $d } } rec-print-dirs $root Thank you E Wilson ---------------------------------------------------------------------- >Comment By: Evil Son (evil_son) Date: 2008-02-01 02:01 Message: Logged In: YES user_id=1993540 Originator: YES Following up on my previous post: what if glob -walk returned a list of pairs <filename, type (i.e. file or dir)> of all directory entries except for . and .. So to print out files under a directory (without error checking or checking for empty return lists): proc allfiles {dir} { foreach pair [glob -walk -directory $dir] { foreach {entry type} $pair {break} if {$type eq "d"} { allfiles $entry } elseif {$type eq "f"} { puts $entry } } } allfiles someDir ---------------------------------------------------------------------- Comment By: Evil Son (evil_son) Date: 2008-01-29 03:37 Message: Logged In: YES user_id=1993540 Originator: YES In response to sender "nobody", if -all were not to return "." and ".." then it would behave exactly like -walk. My less specific (compared to yours) version of -all was aimed at generality while the more specific -walk (which you call -all) is the one I'd use more often .. like you and perhaps most users. Since the existing options are strong enough and we can easily wrap Tcl procedures around them, the motivation is really performance ... which raises the question is there a better interface that can provide superior performance. I think there is but it may become too specific to directory traversal and will require more work; so I hesitated suggesting it. I will put up another request in a couple of days describing it. Thanks for your comment ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2008-01-28 18:11 Message: Logged In: NO I think -all is a good idea provided that it does not return . and .. Given that, -walk would be equivalent to -all -types d, and thus redundant. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=1880980&group_id=10894 |