XXCOPY
[ Back to Table of Contents ] [ << ] [ >> ]

XXCOPY TECHNICAL BULLETIN #16


From:    Kan Yabumoto           tech@xxcopy.com
To:      XXCOPY user
Subject: Gathering files into one directory using XXCOPY
Date:    2000-09-14
===============================================================================

The trouble is...

  Do you know approximately how many files there are on your disk?
  Many people don't have a faintest idea.  But, if you find the XXCOPY
  utility useful at all, you should check the numbers every now and then.
  By the way, in my own modest machine, the C: drive has approximately
  150,000 files in 8,000 directories totaling about 20 GB.

  At any rate, we all face the same headache; too many files in too
  many directories.  Finding a file now becomes a project.  We try
  hard to come up with a better tool in our losing battle.


Search and collect files into just one directory.

  In many cases, collecting certain files into a directory may save a
  lot of time.  For example, if you gather all Microsoft Word document
  (.DOC) files from the entire volume into just one subdirectory,
  browsing them and locating a particular file become much easier.
  That is what XXCOPY's /SX, /SG and their variations are for.

  The traditional way to do this is (don't type beyond the comment //... ),

     XCOPY  C:\*.doc  D:\mydocs\   /S       // using Microsoft's XCOPY
     XXCOPY C:\*.doc  D:\mydocs\   /S       // the same here with XXCOPY

       The /S switch makes the copy operation to recursively
       go inside subdirectories and copy all matching files.
       If subdirectories are not present in the destination,
       they will be created as needed.

       ----------------------------------------------------------
         Note that the destination directory was deliberately
         chosen in a different drive in the examples above.
         Watch out if the destination is in the same volume...

           XCOPY  C:\*.doc  C:\mydocs\   /S       // a FATAL error
           XXCOPY C:\*.doc  C:\mydocs\   /S /CCY

         This is a classic case of the cyclic copy situation which
         Microsoft's XCOPY cannot handle.  Using /CCY, our XXCOPY
         allows you to specify the destination in the same volume.
         See XXTB #07 for detail.
       ----------------------------------------------------------

     Although the files you wanted are all copied into the destination,
     the destination directory will inevitably have many subdirectories
     which makes your next step still very time-consuming.


XXCOPY provides better solutions.

  XXCOPY has a better way to deal with the situation that avoids making
  subdirectories in the destination.  Of course, it is inevitable that
  many files share the same filename.  So, XXCOPY synthesizes new
  names when duplicate files are to be copied into the destination.

     XXCOPY C:\*.doc  D:\mydocs\   /SX
     XXCOPY C:\*.doc  D:\mydocs\   /SG

  Our original directory-flattening functions (/SX, /SL and /SR) combine
  the source directory path (only the distinguishing part) with the
  source filename to form a long filename which is always unique
  (and you can tell where the files are from).

      /SL     Flattens subdirectories, add-name-Left
      /SX     Flattens subdirectories, add-name-Middle
      /SR     Flattens subdirectories, add-name-Right

  By popular demand by XXCOPY users, we re-engineered the new file-gathering
  functions /SG and its variations which retain the original filename.

      /SG     same as /SGN (newest one and sorted by newness)
      /SGN    sorted, newest file first
      /SGO    sorted, oldest file first
      /SGF    unsorted, first come first served

      /SGNO   picks the newest file
      /SGOO   picks the oldest file
      /SGFO   picks the first file encountered

  That's a total of nine flavors to choose from!  Our favorite is /SGN
  which got the honor of being equivalent to its shorter version, /SG.


The /SX (/SL or /SR) switch flattens a directory.

  To understand how these schemes work, it is easiest to actually
  run the command and take a look at the destination directory.
  Let us start with the directory-flattening functions.

    XXCOPY C:\*.doc  D:\mydocs\   /SX     // puts path in the middle

       The result would be

       D:\mydocs\MYFILE`My Documents`word`.DOC
       D:\mydocs\MYFILE`Junk`Vote2000`gore`.DOC
       D:\mydocs\MYFILE`Junk`Vote2000`bush`.DOC
       D:\mydocs\MYFILE`Junk`Vote1996`dole`.DOC
           ...

     The four MYFILE.DOC files are collected from four directories.
     In this case, the backslash (directory name delimiter) is converted
     into a legal character which is infrequently used in filenames
     (default = back-apostrophe (`)).  (See below to select the directory
     name delimiter character other than the default character).

     The /SL and /SR variations respectively place the pathname part
     either at the left or at the right of the filename.  We like the
     /SX version the best among the three variations because the new
     filename starts like the original and the ending also remains
     the same so the Windows knows which application to associate
     the file when you double click the file icon.


The /SG switch gathers files into a directory.

  All the file-gathering functions (/SG and its variations) work
  identically if there is only one file for a given filename.
  The switches with O (not zero, but Oh) at the end keep only one file
  Newest, Oldest, or the First one found) for a given filename.

  On the other hand, other /SG functions have to gather all files
  with the same filename into one directory.  Therefore, we need to
  synthesize the filenames for the duplicates.  XXCOPY simply adds
  a "middle name" to the filename.  For example,


     XXCOPY C:\*.doc  D:\mydocs\   /SG     // sort, newest file first

       The result would be

       D:\mydocs\MYFILE.DOC                // the newest file
       D:\mydocs\MYFILE.0001.DOC           // 2nd newest
       D:\mydocs\MYFILE.0002.DOC           // 3rd newest
       D:\mydocs\MYFILE.0003.DOC           // 4th newest
          ...


  These functions are fun to play with.
  For example, just see how many .JPG (image) files are on your system

      XXCOPY C:\*.jpg  C:\temp\   /SG /CCY

      You may be surprised how much space is tied up with them.
      This particular example may become your favorite tool to
      snoop your children's computer for questionable pictures!!!


Reversal of flattening = rebuilding the tree.

  With regard to the difference between /SX and /SG, for a casual and
  temporary usage, the /SG switch seems easier for most people.  The
  most important difference of the two approaches is that the /SX (and
  also /SL and /SR) switch synthesizes the new filename without losing
  the origin of the file.  As a matter of fact, XXCOPY provides the
  following three switches which allow you to rebuild the original
  directory structure from the destination (flattened) directory.

      /SLR   Rebuild the original directory from directory made by /SL
      /SXR   Rebuild the original directory from directory made by /SX
      /SRR   Rebuild the original directory from directory made by /SR

      Note that these switch must match the way the flattened directory
      was made.  For example if you flatten a directory using /SL, you
      must use /SLR and so on.  Also, the directory name delimiter
      character must be consistent between the flattening and the
      rebuilding steps.


      Examples:

           XXCOPY C:\word\*.doc  D:\mydocs\   /SX        // flattens
           XXCOPY D:\mydocs\     C:\word2\    /SXR       // rebuilds

         The ultimate destination directory (C:\word2\) would contain
         the same files and subdirectories as in the above two steps
         when you run the following command which copies the files
         to the destination directly.

           XXCOPY C:\word\*.doc  C:\word2\    /S


About the directory name delimiter character.

  The directory name delimiter can be any legal non-alphabetic,
  non-blank character.  The following line lists all such characters:

          !  #  $  %  &  '  (  )  -  .  @  ^  _  `  {  }  ~

      Since many of them are frequently used in common English usage
      and therefore likely to appear in filename, the choice for the
      default delimiter character (the back-apostrophe character `)
      was chosen.  The next good candidate is probably the caret symbol (^).
      The trouble here is that the character used as the substitute for
      the backslash character must be a legal character for a filename,
      therefore, it is inevitable that the chosen delimiter may already
      be a part of existing filename.  In such unfortunate cases, the
      directory name which would be rebuilt from the synthesized name
      would not be identical to the original path, a small inconvenience.


Final note.

  Lastly, let me remind you that gathering files into a directory
  is nice, but that contributes to yet more redundant files.  So, make
  sure that you remove all the files you collected for a temporary
  purpose as soon as you are done with them.  One way to deal with
  it is to always use the same one directory for temporary jobs.



© Copyright 2014 Pixelab All rights reserved.

[ XXCOPY Home ] [ Table of Contents ] [ << ] [ >> ]

Join the XXCOPY group