import java.net.MalformedURLException; import jcifs.smb.*; import java.io.*; public class VerifyReads { int maxDepth; byte[] buf = new byte[8192]; VerifyReads( int maxDepth ) { this.maxDepth = maxDepth; } void mkdir( File dir ) { if( dir != null && !dir.exists() ) { mkdir( dir.getParentFile() ); dir.mkdir(); } } void copy( SmbFile f, String path, int depth ) throws MalformedURLException, IOException { int i, d; File localFile, dir; SmbFile[] list; if( depth == 0 ) { return; } localFile = new File( path + "/" + f.getName() ); d = f.getName().lastIndexOf( '.' ); if( f.isDirectory() ) { list = f.listFiles(); for( i = 0; i < list.length; i++ ) { copy( list[i], path + "/" + f.getName(), depth - 1 ); } } else if( d > 1 && f.getName().substring( d ).equalsIgnoreCase( ".ini" )) { mkdir( new File( path )); SmbFileInputStream in = new SmbFileInputStream( f ); FileOutputStream out = new FileOutputStream( localFile ); while(( i = in.read( buf )) > 0 ) { out.write( buf, 0, i ); } in.close(); out.close(); } } public static void main(String[] argv) throws Exception { VerifyReads cd; SmbFile top; int depth; if( argv.length < 2 ) { System.err.println( "Must specify ini directory location (e.g. smb://mydom\\;user:pass@nyc-19b9/apps) followd by the maximum traversal depth"); System.exit( 1 ); } depth = Integer.parseInt( argv[1] ); cd = new VerifyReads( depth ); top = new SmbFile( argv[0] ); if( !top.isDirectory() ) { System.err.println( "The path specified is not a directory" ); System.exit( 1 ); } cd.copy( top, ".", depth ); } }