Zip an existing directory?

P

Peter Marks

Hello,

I am trying to zip an existing directory using the following code:

system("zip /Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29")

but get this error:

zip error: Nothing to do!
(/Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29.zip)

I've seen some tutorials for archiving using the rubyzip gem, but they
all involve manually moving files into an archive instead of archiving
an existing directory. I'm assuming rubyzip is overkill for this?

Thanks,

Peter
 
P

Phlip

I am trying to zip an existing directory using the following code:
system("zip /Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29")

but get this error:

zip error: Nothing to do!
(/Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29.zip)

How does zip work on the command line? What does zip --help tell you?

You must list some files for it to zip, or at least a wildcard *.
 
M

M. Edward (Ed) Borasky

Phlip said:
How does zip work on the command line? What does zip --help tell you?

You must list some files for it to zip, or at least a wildcard *.

At least on Linux / Cygwin, the command to make a zip archive from a
directory is

$ zip archive-file.zip /path/to/archive

The first parameter is the output archive file name and the *second*
parameter is the path you want to archive. So what it's complaining
about is that you didn't give it the output archive file name, just the
path that you wanted to archive.
 
P

petertmarks

Thanks for the help guys. I am developing in osx and will deploy in
ubuntu (this is for a rails app). My original command does not work in
the command line, nor does zip --help on my local machine.

The command you suggested, Ed, gives the following response:

adding: Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29/
(stored 0%)

The archive it produces contains the folders of the intended archive's
path, but not the contents of the "2007-10-29" folder. I need to archive
the contents of that folder. Any other ideas?

Thanks again,

Peter
 
M

M. Edward (Ed) Borasky

Peter said:
Thanks for the help guys. I am developing in osx and will deploy in
ubuntu (this is for a rails app). My original command does not work in
the command line, nor does zip --help on my local machine.

The command you suggested, Ed, gives the following response:

adding: Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29/
(stored 0%)

The archive it produces contains the folders of the intended archive's
path, but not the contents of the "2007-10-29" folder. I need to archive
the contents of that folder. Any other ideas?

Thanks again,

Peter

zip -r archive.zip
Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29/

I forgot the "-r" (for recursive).
 
P

Peter Marks

zip -r archive.zip
Users/petermarks/Desktop/orbus/public/1/daily/2007-10-29/

I forgot the "-r" (for recursive).

Thanks Ed, that archives the contents of "2007-10-29". Do you know if
there is a way to make the new archive only contain the contents of
"2007-10-29" and not the folders of the path leading to it?
 
M

M. Edward (Ed) Borasky

Peter said:
Thanks Ed, that archives the contents of "2007-10-29". Do you know if
there is a way to make the new archive only contain the contents of
"2007-10-29" and not the folders of the path leading to it?

$ cd /Users/petermarks/Desktop/orbus/public/1/daily/
$ zip -r archive.zip 2007-10-29

There's another way, but I don't remember what it is.
 
P

Peter Marks

M. Edward (Ed) Borasky said:
$ cd /Users/petermarks/Desktop/orbus/public/1/daily/
$ zip -r archive.zip 2007-10-29

There's another way, but I don't remember what it is.

I think I'll digg up that other way in order to write this into a ruby
function. Thanks again for you guidance Ed. :)
 
M

M. Edward (Ed) Borasky

Peter said:
I think I'll digg up that other way in order to write this into a ruby
function. Thanks again for you guidance Ed. :)
Isn't there a Ruby library that does this without calling the
command-line function?
 
P

Peter Marks

M. Edward (Ed) Borasky said:
Isn't there a Ruby library that does this without calling the
command-line function?

Apparently there's rubyzip. I haven't really looked into that too much,
but will if I can't get this to work right.
 
7

7stud --

M. Edward (Ed) Borasky said:
$ cd /Users/petermarks/Desktop/orbus/public/1/daily/
$ zip -r archive.zip 2007-10-29

There's another way, but I don't remember what it is.


Try this:

Dir.chdir("/Users/petermarks/Desktop/orbus/public/1/daily")
system("zip -r zipped_rails_app ./2007-10-29")
 
P

Peter Marks

7stud said:
Whoops. Too late.

You were by no means too late. I was unaware that there was a ruby
command to change the directory like that. Exactly what I needed. Thank
you both :)
 
7

7stud --

Peter said:
You were by no means too late. I was unaware that there was a ruby
command to change the directory like that. Exactly what I needed. Thank
you both :)

You could have always used system() again:

system("cd /Users/petermarks/Desktop/orbus/public/1/daily")
 
7

7stud --

7stud said:
You could have always used system() again:

system("cd /Users/petermarks/Desktop/orbus/public/1/daily")

Actually, that doesn't work because the cd system() call executes in a
separate subprocess, so the zip system() call that executes in its own
subprocess can't see the changed directory. You need to execute both
commands in the same subprocess, so you would have to write it like
this:

system("cd /Users/autie/2testing; zip -r zipped_rails_app4 ./dir3")
 
7

7stud --

7stud said:
Actually, that doesn't work because the cd system() call executes in a
separate subprocess, so the zip system() call that executes in its own
subprocess can't see the changed directory. You need to execute both
commands in the same subprocess, so you would have to write it like
this:

system("cd /Users/autie/2testing; zip -r zipped_rails_app4 ./dir3")

Gee whiz, I can't get anything straight tonight. In your case, it would
be like this:

system("/Users/petermarks/Desktop/orbus/public/1/daily"; "zip -r
zipped_rails_app ./2007-10-29")
 
P

Peter Marks

7stud said:
You could have always used system() again:

system("cd /Users/petermarks/Desktop/orbus/public/1/daily")

Oh you're right. I must have done something wrong when initially trying
that one. Thanks nonetheless.
 
P

Peter Marks

haha, well for what it's worth, I got this to work:

system("cd #{RAILS_ROOT}/public/1/daily")
system("zip -r 2007-10-29.zip 2007-10-29")
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top