所以我想创建一个脚本,使我能够将每个文件夹压缩成自己的zip 存档而不是一个大的zip文件。
举个例子,我有一个目录:
+ MyDirectory/
| |
| + Folder_01/
| |
| + Folder_02/
| |
| + Folder_03/
|
当我在MyDirectory
下运行脚本后,我会在MyDirectory
内Folder_01.zip
Folder_02.zip
,Folder_03.zip
和{{}内找到每个文件夹的zip文件1}}。
我知道一些BASH,但这是我无法弄清楚的。
如何做到这一点?
亲切的问候。
答案 0 :(得分:38)
for i in *
do
[ -d "$i" ] && zip -r "$i.zip" "$i"
done
您浏览所有目录并为每个目录创建zip。
或者更简洁:
for i in */; do zip -r "${i%/}.zip" "$i"; done
(感谢damienfrancois的建议)。
答案 1 :(得分:4)
此处
for i in */; do tar -czvf "${i%/}.tar.gz" "$i"; done
答案 2 :(得分:0)
如果您需要较小的输出(以较长的处理为代价),请考虑使用xz
算法:
for d in */ ; do
outName=$d;
outName=${outName// /\-};
outName=${outName//[!0-9a-z-]};
dirName=$d;
dirName=${dirName//\/}
tar -c "$dirName" | xz -e > $outName.tar.xz
done
此代码将清理文件夹名称并为当前目录中的每个文件夹生成.tar.xz
。
答案 3 :(得分:0)
我采用旧的解决方案并返回另一个适用于驱动器中任何位置的任何目录的好的解决方案
Bash 中的这段代码
#!/bin/bash
folderPath=/home/ahmed/test/
for folder in $folderPath*
do
folderName=$(basename $folder)
cd $folderPath && zip -r $folderName.zip $folderName
done
所以test文件夹内的所有文件夹都会被压缩到同一个文件夹中