quoth the Paul L.:
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
amount of
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