在将CMS部署到远程服务器时,使用终端命令“unzip”似乎非常有用,因为您可以传输zip并远程解压缩。但是,我找不到将所有文件直接解压缩到.zip文件所在目录的根目录的方法。默认情况下,它创建一个与.zip文件同名的文件夹,并将文件提取到该文件夹之后我需要做一个mv命令将文件夹的内容移动到根目录。
我可以使用解压缩一步一步做到这一点吗?
在将CMS部署到远程服务器时,使用终端命令“unzip”似乎非常有用,因为您可以传输zip并远程解压缩。但是,我找不到将所有文件直接解压缩到.zip文件所在目录的根目录的方法。默认情况下,它创建一个与.zip文件同名的文件夹,并将文件提取到该文件夹之后我需要做一个mv命令将文件夹的内容移动到根目录。
我可以使用解压缩一步一步做到这一点吗?
Answers:
你问题的具体答案是否定的。OS X附带的解压缩无法动态更改zip中的目录。但需要注意的一点是,zip不是“创建目录”。它是档案的一部分。如果您正在控制创建过程,正确创建的zip存档将不会出现此问题:
$ ls -l
total 0
-rw-r--r-- 1 bsmith staff 0 Sep 30 22:01 b
-rw-r--r-- 1 bsmith staff 0 Sep 30 22:01 c
$ zip -r a.zip .
adding: b (stored 0%)
adding: c (stored 0%)
$ cd ../b
$ unzip ../a/a.zip
Archive: ../a/a.zip
extracting: b
extracting: c
$ ls -l
total 0
-rw-r--r--@ 1 bsmith staff 0 Sep 30 22:01 b
-rw-r--r--@ 1 bsmith staff 0 Sep 30 22:01 c
尝试使用-d参数指定要提取到的根目录。您可以使用 '。' 或'〜'作为您的目录,避免将所有内容放在带有zip文件名的默认目录中。这是文档:
[-d exdir]要提取文件的可选目录。
默认情况下,所有文件和子目录都在当前目录中重新创建; -d选项允许在任意目录中进行提取(总是假设有权写入目录)。此选项不需要出现在命令行的末尾; 它在zipfile规范之前(使用常规选项),在zipfile规范之后立即被接受,或者在文件和-x选项之间被接受。可以连接选项和目录,它们之间没有任何空格,但请注意,这可能会导致正常的shell行为被抑制。特别是,-d ~'' (tilde) is expanded by Unix C shells into the name of the user's home directory, but
-d~''被视为当前目录的文字子目录``〜''。
你可以使用-j标志。
例:
$ mkdir Testing && cd Testing
~/Testing $ touch one two three four five
~/Testing $ cd ..
$ zip -r Testing Testing
$ ls -la | grep Testing
drwxr-xr-x 7 username staff 238 Aug 2 20:03 Testing
-rw-r--r-- 1 username staff 924 Aug 2 20:03 Testing.zip
现在,
$ rm -rf Testing
$ unzip -j Testing.zip
$ ls -la
-rw-r--r-- 1 username staff 0 Aug 2 20:03 five
-rw-r--r-- 1 username staff 0 Aug 2 20:03 four
-rw-r--r-- 1 username staff 0 Aug 2 20:03 one
-rw-r--r-- 1 username staff 0 Aug 2 20:03 three
-rw-r--r-- 1 username staff 0 Aug 2 20:03 two
这将帮助您提取存档的内容,而不是包含的文件夹。
$ man unzip
-j junk paths. The archive's directory structure is not recreated;
all files are deposited in the extraction directory
(by default, the current one).
有关更多信息,请参阅解压缩手册页。