我想压缩子目录并将其发送到其他地方,我遇到的问题是当我使用zip命令时它还包括我不想要的所有不需要的目录层。
e.g。
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
更新:我想要压缩的目录有很多嵌套目录,因此是-r。处理绝对路径也很棒,这个旧解决方案用来讨论这个地方,但我真的不喜欢它。也许这是最好的(唯一)方式。
答案 0 :(得分:17)
您必须将目录更改为您想要启动的位置,或者可以选择“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
这适用于sh / bash / csh / tcsh。
答案 1 :(得分:3)
最简单,惯用的方式:
(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 -@
答案 2 :(得分:3)
一个简单的方法可能就是
cd ./Unwanted1/Unwanted2
zip -r ../../new.zip ./wanted/file.txt
但我不知道你的情况如何。也许你需要从基目录运行?当你想递归遍历目录时,也使用“-r”选项 - 你提供的例子是使用一个文件。