使用特定目录作为根目录压缩目录的命令

50

我正在编写一个PHP脚本,用wget下载一系列生成的文件到一个目录中,然后使用zip命令将它们压缩。

下载工作得非常完美,压缩也大致成功。我运行了以下命令:

zip -r /var/www/oraviewer/rgn_download/download/fcst_20100318_0319.zip /var/www/oraviewer/rgn_download/download/fcst_20100318_0319

这会生成一个包含所有已下载文件的zip文件,但它包含完整的/var/www/oraviewer/rgn_download/download/目录,而不是仅包含fcst_20100318_0319/目录。

我可能只是错过了一个标志或其他小细节,但我该如何使其使用fcst_20100318_0319/作为根目录?

4个回答

53

我认为zip没有这样做的标志。我想唯一的方法是这样的:

cd /var/www/oraviewer/rgn_download/download/ && \
   zip -r fcst_20100318_0319.zip fcst_20100318_0319

(反斜杠只是为了清晰,您可以将其删除并将所有内容放在一行中。)

由于PHP在子shell中执行命令,因此它不会更改当前目录。


谢谢JayM,非常有帮助。 - Basil Musa

5

我也通过使用这个命令使它工作了

exec('cd '.$_SERVER['DOCUMENT_ROOT'].' && zip -r com.zip "./"');

(注:该命令为IT技术相关内容)

正是我所需要的。 - Jasom Dotnet
太好了,正是我想要的。 - Anas Baig
太好了,正好找到了这个。 - undefined

1
使用 zip 命令中的 -j 或 --junk-paths 选项。
zip man page 中可以看到:

-j

--junk-paths

仅保存文件名(丢弃路径),不保存目录名。默认情况下,zip 将存储完整路径(相对于当前目录)。


1
cd /home/public_html/site/upload/ && zip -r sub_upload.zip sub_upload/

4
这是否与被接受的答案完全相同?没有解释,这并不是很有用... - Nikana Reklawyks
这是正确的方式:cd /home/public_html/site/upload/sub_upload && zip -r sub_upload.zip . - Tamilan C.Periyasamy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接