[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

All I want to do is move a directory :

T. Onoma

12/22/2004 6:36:00 PM

Very frustrated. I have just spent well over an hour trying to do the simplest
of all things: move a directory. Of course, I want to do it in Ruby but this
doesn't work:

FileUtils.mv( @dir, ".trash/" )

Could someone please show me why am I apparently so stupid.

Thanks,
T.







17 Answers

T. Onoma

12/22/2004 7:38:00 PM

0

On Wednesday 22 December 2004 02:14 pm, you wrote:
| -----BEGIN PGP SIGNED MESSAGE-----
| Hash: SHA1
|
| trans. (T. Onoma) wrote:
| > FileUtils.mv( @dir, ".trash/" )
| >
| > Could someone please show me why am I apparently so stupid.
|
| I don't think it's smart enough to make subdir for you. Try:
| FileUtils.mv(@dir, File.join('.trash', File.basename(@dir)))

Thanks. That almost works. But the oddest thing happens. If @dir already
exists, it moves it to @dir/@dir. If @dir/@dir already exists it bombs. I
can't figure out why and am starting to think its a bug with #mv.

T.


Gennady

12/22/2004 9:26:00 PM

0

trans. (T. Onoma) wrote:
> Very frustrated. I have just spent well over an hour trying to do the simplest
> of all things: move a directory. Of course, I want to do it in Ruby but this
> doesn't work:
>
> FileUtils.mv( @dir, ".trash/" )
>
> Could someone please show me why am I apparently so stupid.
>
> Thanks,
> T.
>
>
>
>
>
>

What excactly are you experiencing? On what platform? On my Linux box
with Ruby 1.6.8 when I do

$ mkdir aaa
$ mkdir .trash

$ irb -r fileutils
irb(main):001:0> FileUtils.mv "aaa", ".trash/"

it works just fine. The only thing is that if ".trash/aaa" already
exists, I get an exception:

Errno::EISDIR: Is a directory - ".trash/aaa"
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:396:in `open'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:396:in
`copy_file'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:395:in `open'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:395:in
`copy_file'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:445:in `mv'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:432:in
`fu_each_src_dest'
from /usr/local/lib/ruby/site_ruby/1.6/fileutils.rb:432:in `mv'
from (irb):1


Gennady.




T. Onoma

12/22/2004 11:23:00 PM

0

On Wednesday 22 December 2004 04:25 pm, Gennady Bystritksy wrote:
| trans. (T. Onoma) wrote:
| > Very frustrated. I have just spent well over an hour trying to do the
| > simplest of all things: move a directory. Of course, I want to do it in
| > Ruby but this doesn't work:
| >
| > FileUtils.mv( @dir, ".trash/" )
| >
| > Could someone please show me why am I apparently so stupid.
| >
| > Thanks,
| > T.
|
| What excactly are you experiencing? On what platform? On my Linux box
| with Ruby 1.6.8 when I do
|
| $ mkdir aaa
| $ mkdir .trash
|
| $ irb -r fileutils
| irb(main):001:0> FileUtils.mv "aaa", ".trash/"

Yes. That is one of the problems.

T.


T. Onoma

12/23/2004 12:06:00 AM

0

I think the problem may be that the :force option isn't working correctly on
FilUtils#mv. Isn't that supposed to force the move even if the file/directory
is already there?

T.


T. Onoma

12/23/2004 12:31:00 AM

0

On Wednesday 22 December 2004 07:05 pm, trans. (T. Onoma) wrote:
| I think the problem may be that the :force option isn't working correctly
| on FilUtils#mv. Isn't that supposed to force the move even if the
| file/directory is already there?

FYI: ruby 1.8.2p2 on Debian Testing



Minero Aoki

12/23/2004 1:05:00 AM

0

T. Onoma

12/23/2004 4:12:00 AM

0

On Wednesday 22 December 2004 08:04 pm, Minero Aoki wrote:
| It depends on what is the *correct* behavior.
| At least GNU mv does not overwrite directory:
|
| % find
| .
| ./trash
| ./trash/a
| ./trash/a/test
| ./a
| ./a/test
| ./a/test2
| % mv a trash
| mv: cannot overwrite directory `trash/a'
| % mv -f a trash
| mv: cannot overwrite directory `trash/a'
| % find
| .
| ./trash
| ./trash/a
| ./trash/a/test
| ./a
| ./a/test
| ./a/test2
| %
|
| In my opinion, :force option ensures only that #mv does not
| raise exception, it does not imply continuing process.
|

Hmm. I thought for sure -f overwrote, but indeed you are right. So that means
one must perform a 'rm -r' first? If so that's really bad, as it is a much
more dangerous way to have to go about it. If the wrong directory name got in
there it could spell the end of one's machine :( Is there no way to simply
(and truly) _force_ a move?

Thanks,
T.


Mark Hubbart

12/23/2004 7:54:00 AM

0

On Thu, 23 Dec 2004 13:12:17 +0900, trans. (T. Onoma)
<transami@runbox.com> wrote:
> Hmm. I thought for sure -f overwrote, but indeed you are right. So that means
> one must perform a 'rm -r' first? If so that's really bad, as it is a much
> more dangerous way to have to go about it. If the wrong directory name got in
> there it could spell the end of one's machine :( Is there no way to simply
> (and truly) _force_ a move?

It's time to roll your own. If you don't have to worry about moving
across filesystems, a simple File.rename will work:

irb(main):001:0> Dir.mkdir ".trash"
=> 0
irb(main):002:0> Dir.mkdir "aaa"
=> 0
irb(main):003:0> Dir.mkdir ".trash/aaa"
=> 0
irb(main):004:0> Dir.mkdir "aaa/foo"
=> 0
irb(main):005:0> File.rename "./aaa", "./.trash/aaa"
=> 0
irb(main):012:0> puts Dir['.trash/**/*']
trash/aaa
trash/aaa/foo

If you attempt a move across filesystems, rename should raise an
error. You could catch that error and change strategies to a
copy/delete sequence. That would be messier, but...

cheers,
Mark


Ilmari Heikkinen

12/23/2004 12:51:00 PM

0


On 23.12.2004, at 06:12, trans. (T. Onoma) wrote:
> If so that's really bad, as it is a much
> more dangerous way to have to go about it. If the wrong directory name
> got in
> there it could spell the end of one's machine :( Is there no way to
> simply
> (and truly) _force_ a move?

How would a forced move differ from rm -rf followed by move?

-Ilmari



T. Onoma

12/23/2004 2:41:00 PM

0

On Thursday 23 December 2004 07:50 am, Ilmari Heikkinen wrote:
| On 23.12.2004, at 06:12, trans. (T. Onoma) wrote:
| > If so that's really bad, as it is a much
| > more dangerous way to have to go about it. If the wrong directory name
| > got in
| > there it could spell the end of one's machine :( Is there no way to
| > simply
| > (and truly) _force_ a move?
|
| How would a forced move differ from rm -rf followed by move?

Hi --

When you move something (file or directory) to a directory it goes _into_ that
directory rather then on top of it.

T.