--nextPart1906406.5LyV87yNX1 Content-Type: text/plain; charset so-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline quoth the Paul Lutus: > darren kirby wrote: > > Hello all, > > > > A script I have written needs the ability to move files. I thought I > > would be clever and use File.rename(old, newdir + new) but this is giving > > me an error: `rename': Invalid cross-device link. I gather this is > > because I am renaming the file to a different partition. > > No, it is because you are trying to use "rename" to physically move a file, > and the system is objecting to this misconception. File.rename can only > rename files, it cannot move them. It works only on one storage > device/volume/whatever. Well, I think that's pretty much what I said. If you 'rename' a file from /somepath/somefile.txt to /someotherpath/somefile.txt within the same partition you have effectively 'moved' it haven't you... > > So then I found FileUtils and used: > > require 'fileutils' > > include FileUtils > > mv( old, new) > > > > This is working but seems an overly verbose and convoluted way to move a > > file. > > Umm, compared to what? It moves the file using a method named "mv", just > like the Linux/Unix command of the same name. I am typically very impressed with how much you can do with a little amountf code in Ruby. For instance, I only had to add one line to add some recursive directory handling in my script: From: files += Dir.glob("*.#{t}") To: files += Dir.glob("**/*.#{t}") Whereas to move a file, a fairly basic operation, I need four lines of code: require 'fileutils' include FileUtils cp(old, new ) rm (old) I have to change "mv" to "cp" and add the "rm" because the old file is not automatically removed... > > I had a look at the fileutils.rb source and found this (for 'mv'): > > # Moves file(s) +src+ to +dest+. If +file+ and +dest+ exist on the > > # different disk partition, the file is copied instead > > That is what "mv" does. If the new and old filenames and paths allow the > file to remain on the same device, a simple rename is carried out. If not, > the file is copied to the destination and deleted from the source. Right, I've got that... > > So I guess my real question is: is there a technical reason or some > > arbitrary reason there is no File.move() method that can handle this > > transparently? I would think it would be quite useful... > > It might be because not all operating systems on which Ruby can be > installed know the "mv" operation as described above. Just a guess. I am just wondering because there are (AFAIK) other methods that handle the operation transparently even though the underlying OS does it differently. Not trying to troll, I am just curious... -d -- darren kirby :: Part of the problem since 1976 :: http://badcomputer.org "...the number of UNIX installations has grown to 10, with more expected..." - Dennis Ritchie and Ken Thompson, June 1972 --nextPart1906406.5LyV87yNX1 Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) iD8DBQBE7O4twPD5Cr/3CJgRAs26AJsEl+avWGgLRQKxAfJW9I4e+lpSSACcCrhp PZtohOlv6YHoYWhW2IMbl3o oE -----END PGP SIGNATURE----- --nextPart1906406.5LyV87yNX1--