Zip an existing directory?

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

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 *.

Phlip wrote:

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.

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).

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?

Peter M. wrote:

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).

Peter M. wrote:

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?

$ 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.

M. Edward (Ed) Borasky wrote:

$ 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. :slight_smile:

M. Edward (Ed) Borasky wrote:

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.

M. Edward (Ed) Borasky wrote:

Peter M. wrote:

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?

$ 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”)

Peter M. wrote:

M. Edward (Ed) Borasky wrote:

$ 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. :slight_smile:
Isn’t there a Ruby library that does this without calling the
command-line function?

7stud – wrote:

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”)

Whoops. Too late.

7stud – wrote:

7stud – wrote:

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”)

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 :slight_smile:

Peter M. wrote:

7stud – wrote:

7stud – wrote:

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”)

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 :slight_smile:

You could have always used system() again:

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

7stud – wrote:

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”)

7stud – wrote:

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”)

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")

7stud – wrote:

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.