Unix压缩子目录不包括父目录



我想压缩一个子目录并将其发送到其他地方,我遇到的问题是,当我使用zip命令时,它还包括我不想要的所有不需要的目录层。

zip -r /new.zip /Unwanted1/Unwanted2/wanted1/wanted2/file.txt
###unzipped produces the following
/Unwanted1/Unwanted2/wanted1/wanted2/file.txt
###I want
/wanted1/wanted2/file.txt

update:我想要压缩的目录有很多嵌套的目录,因此使用-r。此外,处理绝对路径也很好,旧的解决方案是关于这个地方的cd,但我真的不喜欢它。也许这是最好的(唯一的)方法。

您必须将目录更改为您想要开始的位置,或者可能有一个"zip"选项来为您完成此操作。如果你懒得去阅读手册页中的无数选项,就像我一样,只要先"cd",即使在脚本中也是如此。或者您可以将整个内容括在括号中,而不会影响shell或脚本的工作目录:

(cd Unwanted1/Unwanted2; zip -r ~/new.zip ./wanted/file.txt)

或者因为您使用-r,您可能想要的不仅仅是file.txt,所以:

(cd Unwanted1/Unwanted2; zip -r ~/new.zip wanted)

或者使用pushd/popd来插入/退出:

pushd Unwanted1/Unwanted2
zip -r ~/new.zip wanted
popd

最简单、最习惯的方式:

(cd ./Unwanted1/Unwanted2 && zip -r ../../new.zip ./wanted/file.txt)

现在zip, tar, rar, cpio和朋友都有选项来管理相同的内容,但是它们可能因版本而异,当然也可能因存档实用程序而异。我建议您学习使用shell来完成这项工作,并且您可以使用任何您想要的存档格式

的另一种方法:

(cd ./Unwanted1/Unwanted2 && find . -name "*.txt" -print) | zip new.zip -@

一个简单的方法就是

cd ./Unwanted1/Unwanted2
zip -r ../../new.zip ./wanted/file.txt
但是我不知道你的情况是什么。也许需要从基本目录运行?当您想要递归遍历目录时,也可以使用"-r"选项—您提供的示例使用一个文件。

最新更新