在 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