13

In a linux command line, you zip a file by:

zip -mqj archive.zip file.txt

Now, I need to store 'file.txt' as 'file2.txt' in 'archive.zip', without renaming the file before zipping. When unzipped, the file should be called 'file2.txt'.

How can I store the file with a different name? Read through the MAN page and didn't find an answer.

Trident Splash
  • 435
  • 1
  • 6
  • 13

3 Answers3

12

See https://stackoverflow.com/questions/16710341/linux-zip-command-add-a-file-with-different-name

The solution below is the exact copy of the answer of @mkrnr on stackoverflow

You can use zipnote which should come with the zip package.

First build the zip archive with the myfile.txt file:

zip archive.zip myfile.txt

Then rename myfile.txt inside the zip archive with:

printf "@ myfile.txt\n@=myfile2.txt\n" | zipnote -w archive.zip

(Thanks to Jens for suggesting printf instead of echo -e.)

A short explanation of "@ myfile.txt\n@=myfile2.txt\n":

From zipnote -h: "@ name" can be followed by an "@=newname" line to change the name

And \n separates the two commands.

pihentagy
  • 273
  • 3
  • 7
  • For multiple renames, use the `zipnote file.zip` command to print a file skeleton that shows the syntax for multiple lines. – xtian Sep 07 '22 at 11:11
4

Hy there, this is my first answer so I hope I've done everything correct :-)

Here's my solution to your problem, a nice one-liner:

cp file.txt file2.txt | zip -mqj archive.zip file2.txt

Hope I could help!

hajowieland
  • 161
  • 5
  • 6
    This is a good attempt, but the pipe is confusing. I think the person who asked didn't want to create a copy of the file first, but if he did, another way of doing this might be cp file.txt file2.txt && zip -mqj archive.zip file2.txt && rm -f file2.txt - this would clean up the temporary file2.txt that got created. – Matt Simmons May 31 '09 at 18:05
  • 2
    thanks for pointing this out - I would post this approach, too (but you already did, thanks!) cp file.txt file2.txt && zip -mqj archive.zip file2.txt (because of the -m switch the file already gets moved and there's no need to remove afterwards!) – hajowieland May 31 '09 at 18:09
  • Ah! Good call. I'm less familiar with zip than I am tar. thanks! – Matt Simmons May 31 '09 at 18:14
  • @Matt. Cant we just use mv instead of cp which wont create a copy, will rename the file, zip it and remove the copy to clear space. Just a thought. – Viky Jun 01 '09 at 04:37
  • @Viky - That would work fine, except one of the requests in the question was that we not rename the file. I think if we got more about the situation, a better answer would have presented itself, but as long as the person who asked the question is happy... – Matt Simmons Jun 01 '09 at 12:19
3

Does creating a hard link to file.txt count?

ln file.txt file2.txt

Create file2.txt which points to the exact same inode as file.txt, without actually doubling the space

Déjà vu
  • 5,408
  • 9
  • 32
  • 52
Matt Simmons
  • 20,218
  • 10
  • 67
  • 114