Tar*_*nti 4 bash unzip gnu-parallel gnu-findutils
我想解压多个文件,
使用此答案,我找到了以下命令。
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
如何通过上述命令使用 GNU Parallel 解压缩多个文件?
编辑 1:根据用户Mark Setchell提出的问题
文件在哪里?
所有的 zip 文件通常都在一个目录中。
但是,根据我的假设,该命令会根据 find 命令中给出的深度递归/非递归地查找所有文件。
文件是如何命名的?
abcd_sdfa_fasfasd_dasd14.zip
你通常如何解压缩一个?
unzip abcd_sdfa_fasfasd_dasd14.zip -d abcd_sdfa_fasfasd_dasd14
您可以首先使用NULL 分隔文件find的-print0选项,然后在 GNU 中与 NULL 分隔符并行读回并应用解压缩
find . -type f -name '*.zip' -print0 | parallel -0 unzip -d {/.} {}
Run Code Online (Sandbox Code Playgroud)
该部分{/.}应用字符串替换来获取文件的基本名称并删除.从GNU 并行文档中{.}{:}看到的前面的部分- 请参阅 7. 获取基本名称,并删除最后一个 ( ) 或任何 ( ) 扩展名您可以进一步设置并行数可以使用-j标志运行的作业。例如-j8,-j64
您还可以使用 的+变体-exec。它parallel在find完成后启动,但也允许您仍然使用-print/ -printf/ -ls/etc。并可能在执行命令之前中止查找:
find . -type f -name '*.zip' -ls -exec parallel unzip -d {.} ::: {} \+
Run Code Online (Sandbox Code Playgroud)
请注意,GNU Parallel 还用于{}指定输入参数。但是,在这种情况下,我们会{.}像示例中所示那样删除扩展名。{}您可以使用覆盖GNU Parallel 的替换字符串-I(例如,使用-I@@允许您使用@@代替{})。
我建议使用 GNU Parallel 的--dry-run标志或在前面添加unzip一个来echo首先测试命令并查看将执行什么。
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |