in reply to Re^3: Optimizing files' moving with File::Find & File::Copy modules
in thread Optimizing files' moving with File::Find & File::Copy modules

If he doesn't have that implementation of find, and there are spaces in filenames, the array form of system will handle them:
my @files = <$dir1/*>; system("mv", @files, $dir2);
  • Comment on Re^4: Optimizing files' moving with File::Find & File::Copy modules
  • Download Code

Replies are listed 'Best First'.
Re^5: Optimizing files' moving with File::Find & File::Copy modules
by JavaFan (Canon) on Nov 17, 2009 at 17:27 UTC
    Eh, no. <$dir1/*> doesn't distinguish between files and directories, it doesn't find files whose name start with a dot, and doesn't recurse into directories below $dir1. And if there are many files, you may run into system limits - most OSses have a limit on the number of arguments (and total size of the arguments) exec can take. (E2BIG).
      So I simplified "finding" the files :-) (as you did in your first answer...and before I read the followup about needing a recursive find...and if a single level was adequate but you needed to filter directories, then a simple grep could take care of that...and if you really wanted files with leading dots, then add a ".*" pattern to the glob) You could use File::Find to push the files onto an array, then splice off N files at a time and use system to move the files.