Zip垃圾路径选项不起作用

时间:2016-11-26 06:45:59

标签: linux shell zip

我有点奇怪,我似乎无法弄清楚。

这是设置。我正在下载一堆通过数组提供给脚本的文件。这些文件不一定在同一个文件夹中,所以我不认为只是使用cd来更改目录,然后添加我想要的文件。

我已将-j添加到我的shell命令中,以便不包含目录,并且它有效...有点儿。现在我将所有文件放在zip的顶层,但它还包括相应目录中文件的目录和重复版本。

有什么想法吗?

编辑:添加了代码。

我有一个像这样的文件数组:

Images
    --image1.jpg
    --image2.jpg
Other images
    --image3.jpg
    --image4.jpg
Other folder\Another subfolder\Why so many folders\
    --image5.jpg

所以我想要的是将所有图像放在zip的根目录中,但我得到的是一个zip中的目录和垃圾目录:

Zip
    --Images
        --image1.jpg
        --image2.jpg
    --Other images
        --image3.jpg
        --image4.jpg
    --Other folder
        --Another subfolder
            --Why so many folders
                --image5.jpg
                --image6.jpg
    --image1.jpg
    --image2.jpg
    --image3.jpg
    --image4.jpg
    --image5.jpg
    --image6.jpg

我的代码很简单,我使用-j去掉目录并将文件数组传递给zip。如果我删除了-j,它只包含一个文件副本,虽然在文件夹中,所以我知道问题不是我的数组加倍了文件。

zip -jq zip array_of_files

修改 解决了。那种。

出于某种原因,当我将-j放在命令行的末尾时,它按预期工作。不确定为什么这很重要,但它修复了它。这是有效的。

zip zipname array_of_files -jq 

1 个答案:

答案 0 :(得分:1)

您可以同时使用findzip的组合。在与单个文件夹相同的级别运行上述命令。

find . -type f -name "*.jpg" -print | zip -jq myfile.zip -@

find命令列出当前路径中的jpg个文件,-@中的zip选项是从上一个命令生成的stdin读取的。以及垃圾路径的-jq标志。

通过上述命令,我能够按照您的意图实现结构。使用unzip -l列出存档下的文件而不提取。

$ unzip -l myfile.zip
Archive:  myfile.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  11-26-16 13:08   image1.jpg
        0  11-26-16 13:09   image2.jpg
        0  11-26-16 13:09   image3.jpg
        0  11-26-16 13:09   image4.jpg
 --------                   -------
        0                   4 files

当你总共有4张图片时,上面的我的模拟是你的原始输入。