So, I recently got a request to come up with the following solution. I'm sure there's a bunch of ways to do this, including writing a custom script, but I wanted to know the best recommended way to solve it.
They'd like to have the following file structure. Files would only be stored in the deepest subdirectories (Quotes and Images).
- Clients
- John Doe
- Quotes
- Images
- Jane Doe
- Quotes
- Images
- Jack Doe
- Quotes
- Images
- Carl
- Quotes
- Images
- John Doe
However, at the same time, they'd like to be able to view
- All Quotes
- All Images
Which would contain all of the files (and links to) all of the aggregated files from the associated subdirectories.
Personally, I think the simplest solution is the best (rather than having to install a Digital Asset Manager or something along those lines) but I'd really like to hear what you think is the best way of solving this problem, regardless of complexity.
Windows Vista and later versions come with the ability to save file searches and re-run them upon double-klicking - this might be sufficient for you.
If you need something which is client-independent / server-based, you could create directories for "All Quotes" and "All Images" and periodically run a script creating either hard or symbolic links to the quote / image files in the underneath user's directories with the user name as the prefix to prevent naming conflicts (like "jane doe - holiday.jpg"). You could use a service like ChkMagic which would be watching your directories and trigger the script only when the contents have actually been modified.
Both solutions would require you to have set the filesystem permissions appropriately (i.e. every user should at least be able to traverse the foreign user's directories and read the contained files).
How many clients are there? If there are really only four like you list you can use a DFS namespace to aggregate all of the shares underneath each client. This isn't viable with more than a handful of users, though, since you'd need to link each subfolder to the namespace.
If you had Sharepoint setup on your Windows Server 2003 server (which is available for free), you could create a document library, with content types for Quotes and Images. Both content types would have a column defined for the Client Name - you could make this a select list, and give a specific person the responsibility of updating this list. Client Name is set as required.
Files are then saved into this document library, and must be assigned a content type, and then the Client Name selected.
You can then create a view of the document library for each Client, and one for All Images and one for All Quotes.
Sadly, Windows doesn't support such a "Fan-out" file-system. There is no way to make 1 directory out of two separate directories.
Your best bet would be to do one of the following:
A) Create a structure like this:
B) or like this:
The First layout is probably the easiest solution for most users, but sometimes difficult to implement. I would suggest avoiding having duplicate copies of the "shared folders" and attempting to replicate all the changes of each folder to each other. This could just as easily be done using a
shortcut
to a "shared directory", or if you're feeling more confident, ajunction
to the "shared directory". The latter would have the benefit of being searchable within their own folders... but would be more complex to initially set up.The 2nd method is easier to setup/administer/manage by the administrator, but isn't as friendly for the user. You would just build a single "All Users" type directory and inform your users of it's existence/location. The down-side of this is that many users simply won't use it. Rather than look in two places (potentially doubling the time looking for a file) they'll just opt for the simpler approach of copying "shared documents" to their private folder... or duplicating everything.