我正在使用 WSL (Ubuntu) 并尝试递归地将文件压缩到一堆子文件夹中。
IE
Main Folder .
SubFolder 1's files get zipped into a .zip
SubFolder 2's files get zipped into a .zip
SubFolder 3's files get zipped into a .zip
SubFolder 4's files get zipped into a .zip
SubFolder 5's files get zipped into a .zip
etc.
我导航到主文件夹,然后运行:
find . -type d -maxdepth 1 -execdir zip -r '{}.zip' '{}' \;
这样做后,我收到了一堆垃圾邮件:
查找:'zip':没有这样的文件或目录
我也尝试过完全相同的行,使用exec
而不是execdir
但得到了相同的结果。有谁能指出问题所在吗?
答案1
该错误意味着您尚未安装该zip
命令,请测试command -v zip
;空输出表示未安装,请安装sudo apt install zip
。
分别到zip
每个目录的文件排除您需要将-j
选项添加到zip
commnad的目录:
find . -mindepth 1 -maxdepth 1 -type d -execdir zip -jr '{}.zip' '{}' \;
请注意,您需要-maxdepth
在 before 之前指定选项-type d
,还添加了-mindepth 1
忽略压缩当前目录的选项;或将两者替换为[! -name . -prune
;将 POSIX 查找限制到特定深度?],所以命令是:
find . ! -name . -prune -type d -execdir zip -jr '{}.zip' '{}' \;
或者你也可以使用 for 循环:
for thing in ./*; do
[[ -d "${thing}" ]] && zip -jr "${thing}.zip" "${thing}";
done
请注意,由于使用了-j
选项,如果有从不同子目录收集到单个 zip 文件中具有相似名称的文件,命令将因相同的文件名而停止压缩。