Question: Question:
In this situation
$ pwd
~/Desktop
$ ls myzip*
myzip.zip
Sometimes I accidentally do this in the hope that it will be unzipped under ~/Desktop/myzip/
:
$ unzip myzip.zip
result
$ tree
├── extracted_file0
├── extracted_file1
. ...
├── myzip.zip
... # 元から ~/Desktop にあったファイルたちに混ざってしまっている
It has become a catastrophe, so I want to return to the original situation. If an existing file has already been overwritten, it can be ignored, and how can unzip
erase the files that were unintentionally scattered in the directory?
As I have already tried, I found that unzip -l myzip.zip
gives text in the following format.
Archive: myzip.zip
Length Date Time Name
--------- ---------- ----- ----
119 2015-01-02 16:05 hashas.hs
274 2015-01-25 16:05 piepie.py
--------- -------
393 2 files
For the time being, I wrote this to a file, formatted it into a list of file names with vim
, and dealt with it with cat files.txt | xargs rm
. I would like to know a method that is a little less ad hoc.
Answer: Answer:
The following is not an answer. It is a story about how to prevent such an accident.
Originally, the unzip command will extract the contents of the archive as it is. Therefore, if the files in the archive are not stored in a single directory, an accident like this may occur. However, even if it is contained in a single directory, it is the same if there is a directory with the same name in the current directory. .. ..
For the time being, unzip has a -d
option that will extract the contents of the archive to the specified directory. If the specified directory does not exist, it will be created without permission.
$ unzip -d output myzip.zip
$ ls output
c001.txt c002.txt c003.txt ...
However, it is tiring to specify the directory every time, and if you forget to specify it, it will still be …
I wondered if there was any command other than unzip that would suit my purpose, and found unar (well, I've been using it for some time).
unar (1)
-d, -force-directory
By default, a directory is created if there is more than one top-level file or folder. By default, a directory is created if there is more than one top-level file or folder .
In the case of myzip.zip
this time, it will create a myzip
directory and extract it in it (create a directory with the basename of the archive).
There are other options like this.
-r, -force-rename
Always rename files when a file to be unpacked already exists on disk.
For example, if you already have a file called a.txt
, it will rename it to a-1.txt
.
Please for your reference.