Ray Camden's Friday Puzzler - Compare Directories
Posted December 7, 2007 at 11:34 AM
Ray Camden put up a Friday Puzzler to compare directories. This felt like a place to quickly throw some ColdFusion query of queries together. This solution will work with small directories, but certainly, I doubt that this will scale nicely as it would end up generating ENORMOUSLY SQL statements.
To start off with, I created two small directories:
Directory A:
- \A\20071207.txt
- \A\a-only.txt
- \A\duplicate_file.txt
Directory B:
- \B\20071207.txt
- \B\b-only.txt
- \B\duplicate_file.txt
Each directory has a file that is unique to them (a-only.txt and b-only.txt). Each on has a duplicate file (duplicate_file.txt). And, each on of them has a duplicate file that is a different size (20071207.txt). To compare these two directories from the directory, I ran this code:
Launch code in new window » Download code as text file »
- <!--- Query files from directory A. --->
- <cfdirectory
- action="list"
- directory="#ExpandPath( './A/' )#"
- name="qA"
- />
-
-
- <!--- Query files from directory B. --->
- <cfdirectory
- action="list"
- directory="#ExpandPath( './B/' )#"
- name="qB"
- />
-
-
- <!--- Query for files that are in A, but not in B. --->
- <cfquery name="qAOnly" dbtype="query">
- SELECT
- [name]
- FROM
- qA
- WHERE
- [type] = 'File'
- AND
- (
- 1 = 1
-
- <!---
- Make sure the current A record does NOT
- match any records in the B query.
- --->
- <cfloop query="qB">
-
- AND
- [name] != '#qB.name#'
-
- </cfloop>
- )
- </cfquery>
-
-
- <!--- Query for files that are in B, but not in B. --->
- <cfquery name="qBOnly" dbtype="query">
- SELECT
- [name]
- FROM
- qB
- WHERE
- [type] = 'File'
- AND
- (
- 1 = 1
-
- <!---
- Make sure the current B record does NOT
- match any records in the A query.
- --->
- <cfloop query="qA">
-
- AND
- [name] != '#qA.name#'
-
- </cfloop>
- )
- </cfquery>
-
-
- <!---
- Query for files that are both in A and B, but not
- on the same date or size.
- --->
- <cfquery name="qBoth" dbtype="query">
- SELECT
- qA.[name]
- FROM
- qA,
- qB
- WHERE
- qA.[type] = 'File'
- AND
- qA.[name] = qB.[name]
- AND
- (
- qA.datelastmodified != qB.datelastmodified
- OR
- qA.size != qB.size
- )
- </cfquery>
-
-
-
- <!--- Dump out results. --->
- <cfdump
- var="#qAOnly#"
- label="Directory A Only"
- />
-
- <br />
-
- <cfdump
- var="#qBOnly#"
- label="Directory B Only"
- />
-
- <br />
-
- <cfdump
- var="#qBoth#"
- label="Both But Different"
- />
When we run that, we get this CFDump output:
| | | | ||
| | ![]() | | ||
| | | |
So, it works for small little directory compares. I know anything about File Diffs or Directory Diffs, so I am sure that there are way more optimized ways of doing this. But, ColdFusion query of queries makes this a rather easy task.
Download Code Snippet ZIP File
Post Comment | Ask Ben | Print Page
Newer Post
No Country for Old Men Starring Tommy Lee Jones, Javier Bardem, And Josh Brolin
Older Post
Arc90 Classic Arcade Game Night
Reader Comments
My solution also used QoQ, but differently:
http://www.coldfusionjedi.com/index.cfm/2007/12/7/Friday-Challenge--Compare-Directories#cB5E79338-19B9-E658-9D3917D4071BDB2D
-R
Interesting approach. I requested the challenge since I have to write a script to see if previous people were doing their development on the development server or the production server :(
Here is a link to my original idea:
http://www.mediafire.com/?6yttt3x1kdt (download)
http://snippets.dzone.com/posts/show/4864 (view online)
Any thoughts on my solution would be appreciated.
@Rick,
Your solution is very good. My hat is off to you, good sir. It's nice to see someone who really knows how to leverage ColdFusion query of queries. Sometimes I think they are one of the unsung heroes of ColdFusion.
Thanks for the article, I was seeking it.
"So you can find the information on it on my search resource
http://fileshunt.com"





