--nextPart1906406.5LyV87yNX1
Content-Type: text/plain;
  charsetso-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
PZtohOlv6YHoYWhW2IMbl3ooE
-----END PGP SIGNATURE-----

--nextPart1906406.5LyV87yNX1--