Zip folder which contain a folder named - , it can't be zip
folder structure
~/-
~/b.txt
~/-/a.txt
command
cd ~
zip -r abc.zip .
will stuck
~# zip -r abc.zip .
adding: -
I used strace (read(0)), it seems zip treat the folder as a -(standard input).
how can zip folder which contain a folder which name is dash(-)
You can create zip on this way:
zip -r file.zip -/* b*
I know, its not so elegant but it work.
Or you can use tar on such way:
tar cvf file.tar .
Related
I'm trying to only zip the directory where I am exactly, this is part of a bigger bash script so I need to cd into the directory where I want to extract files and then exit.
However, using either tar or zip, the entire top directory path is recreated and not just the subdirectory that I'm interested in.
I get the following error:
zip warning: name not matched: $PWD/*
What I'm trying to do:
#Sub Directory and contents will be compressed
cd "$Sub_Dir"
Zipped_Files=$(basename "$Sub_Dir")
zip -r "$Zipped_Files".zip "$PWD/*"
#or
zip -j "$Zipped_Files".zip "$PWD/*"
#or
#tar -zcf "$Zipped_Files".zip "$PWD"
echo "Files have been compressed"
You have already cd into the sub dir, zip -r "$Zipped_Files".zip ./* should work.
On CentOS, I wanted to unzip files in A.zip into ./A/. However, I didn't notice that there were hundreds of files in A.zip and I just use unzip A.zip. So now these extra files are all in the current directory. How could I solve this problem?
Thank you very much for any help!
You can try this -
unzip -Z1 is the zip info mode which basically returns the files which were zipped. The output is then piped onto other command which removes that file based on the input(from the previous command).
Assuming, first you take a proper backup of that folder.
unzip -Z1 t1.zip | xargs rm -f
If the zip files has folders inside of it then
unzip -Z1 t1.zip | xargs rm -rf
t1.zip is the zip file which I tested with.
zip -r $packageName.zip /home/ubuntu/backend/upgrade/temp
I expect $packageName.zip to have all the contents in temp folder. However, I'm getting /home/ubuntu/backend/upgrade/contents in my zip folder.
I've tried
pushd /home/ubuntu/backend/upgrade/temp
zip -j /home/ubuntu/backend/test.zip ./*
popd
and
pushd /home/ubuntu/backend/upgrade/temp
zip -r /home/ubuntu/backend/test.zip ./*
popd
This should work:
zip -rj $packageName.zip /home/ubuntu/backend/upgrade/temp
You need the recursive portion of the command combined with the relative paths.
Currently I'm using the following command to zip all my folders and files with the exception of a few.
zip -r Archive.zip . -x '*.git*' '*.DS_Store*' '*.pyc*'
The problem with this command is it doesn't delete files in the older zip file that I deleted.
So I know that I can just run the rm command on the zip file before making a new one. However, I wanted to see if there's a way I can essentially combine the zip command above with an rm command.
You can delete a specific file from zip archive with -d flag
-d
--delete
Remove (delete) entries from a zip archive. For example:
zip -d foo foo/tom/junk foo/harry/\* \*.o
In Linux I can zip all(except hidden files) in current directory by doing:
zip 1.zip *
But how do I include the hidden files?
EDIT: The correct way is zip -r 1.zip .
The commands shown in my previous answer below are incorrect because they also include the parent directory.
Have you tried this:
zip yourfile.zip sourcedir/* .*
or you in your case
zip 1.zip * .[^.]*
It should include all hidden files also.
Or you can add more simple
zip 1.zip ./
Just to be sure it is not forgotten since this is a forum for developers and a good number of us use git.
An easy way to get only what you want in the zip is to use git archive -o filename.zip branch
If you want to zip all files (+hidden files)
Kindly using: zip -r namefiles.zip .
The "." is all files in folder.
zip -r namefiles.zip "folder will zip"
On macOS 10.15.7 I had to separatelly add all dot leading files (\.*) and rest of the files (*):
zip -r file.zip \.* *
if you don't have rights to save zip file in current dir you can go to dir where you have rights and type
zip -r 1.zip /path/to/source/dir/.
However when if in .../some_dir you type
unzip 1.zip
then your files will be decompress into .../some_dir/path/to/source/dir/
zip -r 1.zip .* -x "../*"
Just doing zip -r 1.zip .* will include the parent folder as well so the trick is to exclude the parent folder using -x "../*"
If you'd like to save some subdirectory of the current directory recursively with hidden and regular files just type
$ zip -r backup_subdirectory.zip backup_subdirectory/. backup-subdirectory/*
And for unzipping:
$ unzip backup_subdirectory.zip
Or even simpler by using tar for creating an archive:
$ tar czvf backup_subdirectory.tar.gz backup_subdirectory/
And for extracting all files from the archive:
$ tar xzvf backup_subdirectory.tar.gz