zip 文件夹,不包括 bash 中的根目录

问题描述 投票:0回答:0

在 bash 中压缩仅包含根目录的文件夹的最佳方法是什么?我正在尝试使用

-j
选项,但它排除了文件之前的所有目录。

所以,假设我有以下结构:

.
├── f1
│   └── f
│       └── file
├── f2
│   └── f
│       └── file
└── f3
    └── f
        └── file

我想要的是最终得到三个 zip 文件,在每个文件夹中

f
包含一个文件
file
。我尝试了很多不同的选项,但所有选项都以包含
f1/f/file
file
的 zip 文件结束。唯一改变的是这些文件和文件夹的压缩方式:

zip -r f1.zip f1/

$ zip -r f1.zip f1/
  adding: f1/ (stored 0%)
  adding: f1/f/ (stored 0%)
  adding: f1/f/file (stored 0%)
$ unzip -l f1.zip 
Archive:  f1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2023-03-15 22:13   f1/
        0  2023-03-15 22:14   f1/f/
        0  2023-03-15 22:14   f1/f/file
---------                     -------
        0                     3 files

zip -r f1.zip f1/f

$ zip -r f1.zip f1/f
  adding: f1/f/ (stored 0%)
  adding: f1/f/file (stored 0%)
$ unzip -l f1.zip 
Archive:  f1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2023-03-15 22:14   f1/f/
        0  2023-03-15 22:14   f1/f/file
---------                     -------
        0                     2 files

有了上面的结果,我得到了

zip -r f1.zip f1/*

如果我使用

-j
参数,我最终只会得到
file
.

$ zip -r -j f1.zip f1/
  adding: file (stored 0%)
$ unzip -l f1.zip 
Archive:  f1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2023-03-15 22:14   file
---------                     -------
        0                     1 file

我最终得到与

zip -r -j f1.zip f1/*
相同的结果。

现在我更改目录,压缩它并改回它,但似乎那必须是更好的方法。

for folder in `ls -d */`; do 
    pushd ${folder%?}; 
    zip -r ../${folder%?}.zip f/; 
    popd; 
done
bash zip
© www.soinside.com 2019 - 2024. All rights reserved.