Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix压缩子目录不包括父目录_Unix_Terminal_Zip - Fatal编程技术网

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

Unix压缩子目录不包括父目录,unix,terminal,zip,Unix,Terminal,Zip,我想压缩一个子目录并将其发送到其他地方,问题是当我使用zip命令时,它还包括我不想要的所有不需要的目录层 e、 g 更新:我想要压缩的目录有很多嵌套的目录,因此是-r。另外,处理绝对路径也很好,以前的解决方案是关于这个地方的,但我真的不喜欢。也许这是最好(唯一)的方法。最简单、惯用的方法: (cd ./Unwanted1/Unwanted2 && zip -r ../../new.zip ./wanted/file.txt) 现在,zip、tar、rar、cpio和friend

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

e、 g


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

最简单、惯用的方法:

(cd ./Unwanted1/Unwanted2 && zip -r ../../new.zip ./wanted/file.txt)
现在,zip、tar、rar、cpio和friends都有相同的管理选项,但它们可能因版本而异,当然也可能因归档实用程序而异。我建议您学习使用shell来完成这项工作,并且可以使用您想要的任何归档格式

另一种方式:

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

一个简单的方法就是

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

但我不知道你的处境如何。也许您需要从基本目录运行?当您想要递归遍历目录时,也可以使用“-r”选项—您提供的示例是使用一个文件。

您必须将目录更改为您想要开始的任何位置,或者可能有一个“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中起作用。

The
-r
表示递归。如果您真的需要使用它,那么您应该仔细阅读exclude的zip选项。如果您只想压缩一个文件,请将cd刻录到相应的父目录(根据您的示例)。/Unwanted1/Unwanted2,然后
zip new.zip wanted/file.txt
。也就是说,我不认为有一个zip选项意味着“丢弃输入文件名上的前n层子目录信息”。祝你好运。你已经编辑了你的例子,这改变了游戏。人们通常不想要这样的绝对路径。“zip”中可能有更多的路径修剪/控制选项,但我对此表示怀疑。阅读手册页。或者切换到“tar”并阅读(同样长的)手册页。如果你添加一个文件,不管文件有多深,你仍然不需要-r。感谢它实际上是多个目录和文件,例如v.simpleyah,就像icarus和sehe说的,如果你把命令括在括号里,它不会在完成执行后弄乱您当前的工作目录。尽管我更希望在
zip
中使用一个标志/选项来省略父文件夹结构,但似乎没有更好的方法可以做到这一点。这两个标志
-j
-D
在复杂的子文件夹结构上都没有达到我们想要的效果。
pushd Unwanted1/Unwanted2
zip -r ~/new.zip wanted
popd