pat*_*ick 5 zip terminal shell applescript macos
我承认这个问题以前在这里被问过:
就像将Zip 压缩到单独的文件中一样,询问的人没有指定他使用的操作系统,也没有收到任何答复。
我需要将一个巨大的目录分成多个不相互依赖的 .zip 文件。所以,而不是:
file1.zip
file2.z01
file3.z02我想要以下一组文件:
file1.zip
file2.zip
file3.zip
基本上这是我的问题。我在 OS X 上,所以 shell 脚本或 AppleScript 将是最简单的方法。
另外,这里有一个人提出了同样的问题 - 只有他想创建一个 .tar 存档:如何为一组文件创建单独的存档
答案是正确的,但会产生 tar 文件:
for file in `ls *`; do tar -czvf $file.tar.gz $file ; done
Run Code Online (Sandbox Code Playgroud)
PS:最后一部分仅适用于那些适合键盘大师的人:
我还尝试在 Keyboard Maestro 中执行此操作,我有一个“for each”操作设置,用于确定文件路径,然后触发 shell 脚本。输出是正确的,如果我将它粘贴到终端中,宏就可以工作(例如zip
/Users/me/Desktop/test /Users/me/Desktop/test.txt)。
但是,当我将两个变量传递给 Keyboard Maestro 中的 shell 脚本时,将无法正常工作:
zip "$KMVAR_zipPath" "$KMVAR_sourcePath"
slh*_*hck 15
解决方案非常简单。如果要递归地对每个文件执行此操作,请使用find. 它将列出所有文件和目录,也降到子目录中。
find . -type f -execdir zip '{}.zip' '{}' \;
Run Code Online (Sandbox Code Playgroud)
解释:
.-type f)-execdir选项允许我们对找到的每个文件运行一个命令,从文件的目录中执行它zip file.txt.zip file.txt例如,此命令被评估为,因为所有出现的{}都被替换为实际文件名。此命令需要以\;当然,find还有更多选择。如果您只想留在当前目录中,而不是进入子目录:
find . -type f -maxdepth 1 -execdir zip '{}.zip' '{}' \;
Run Code Online (Sandbox Code Playgroud)
如果要将其限制为某些文件类型,请使用该-name选项(或-iname用于不区分大小写的匹配):
find . -type f -name "*.txt" …
Run Code Online (Sandbox Code Playgroud)
在我看来,其他任何东西(包括for在 的输出上循环ls *)都是非常丑陋的语法,并且可能会中断,例如在名称中包含空格或由于参数太多的文件。
| 归档时间: |
|
| 查看次数: |
15458 次 |
| 最近记录: |