如何将 GNU 与 find -exec 并行使用?
How to use GNU parallel with find -exec?
我想解压多个文件,
使用this answer,我找到了以下命令。
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" ""' _ {} \;
如何通过上述命令使用 GNU Parallel 来解压多个文件?
编辑 1:
根据用户 Mark Setchell
的提问
Where are the files ?
所有 zip 文件通常都在一个目录中。
但是,根据我的假设,即使 recursively/non-recursively 根据 find 命令中给出的深度,该命令也会找到所有文件。
How are the files named?
abcd_sdfa_fasfasd_dasd14.zip
how do you normally unzip a single one?
unzip abcd_sdfa_fasfasd_dasd14.zip -d abcd_sdfa_fasfasd_dasd14
您可以先使用 find
和 -print0
选项来以 NULL 分隔文件,然后在 GNU 中与 NULL 分隔符并行读回并应用解压缩
find . -type f -name '*.zip' -print0 | parallel -0 unzip -d {/.} {}
{/.}
部分应用字符串替换来获取文件的基本名称,并从 GNU parallel documentation - See 7. Get basename, and remove last ({.}
) or any ({:}
) extension 中删除 .
之前的部分您可以进一步设置并行数可以 运行 带有 -j
标志的作业。例如-j8
、-j64
您也可以使用 -exec
的 +
变体。它在 find
完成后开始 parallel
,但也允许您仍然使用 -print
/-printf
/-ls
/等。并可能在执行命令之前中止查找:
find . -type f -name '*.zip' -ls -exec parallel unzip -d {.} ::: {} \+
请注意,GNU Parallel 还使用 {}
来指定输入参数。但是,在这种情况下,我们使用 {.}
删除扩展名,如您的示例所示。您可以用 -I
覆盖 GNU Parallel 的替换字符串 {}
(例如,使用 -I@@
允许您使用 @@
而不是 {}
)。
我建议使用 GNU Parallel 的 --dry-run
标志或在 unzip
前面加上 echo
来先测试命令,看看会执行什么。
我想解压多个文件,
使用this answer,我找到了以下命令。
find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" ""' _ {} \;
如何通过上述命令使用 GNU Parallel 来解压多个文件?
编辑 1: 根据用户 Mark Setchell
的提问Where are the files ?
所有 zip 文件通常都在一个目录中。
但是,根据我的假设,即使 recursively/non-recursively 根据 find 命令中给出的深度,该命令也会找到所有文件。
How are the files named?
abcd_sdfa_fasfasd_dasd14.zip
how do you normally unzip a single one?
unzip abcd_sdfa_fasfasd_dasd14.zip -d abcd_sdfa_fasfasd_dasd14
您可以先使用 find
和 -print0
选项来以 NULL 分隔文件,然后在 GNU 中与 NULL 分隔符并行读回并应用解压缩
find . -type f -name '*.zip' -print0 | parallel -0 unzip -d {/.} {}
{/.}
部分应用字符串替换来获取文件的基本名称,并从 GNU parallel documentation - See 7. Get basename, and remove last ({.}
) or any ({:}
) extension 中删除 .
之前的部分您可以进一步设置并行数可以 运行 带有 -j
标志的作业。例如-j8
、-j64
您也可以使用 -exec
的 +
变体。它在 find
完成后开始 parallel
,但也允许您仍然使用 -print
/-printf
/-ls
/等。并可能在执行命令之前中止查找:
find . -type f -name '*.zip' -ls -exec parallel unzip -d {.} ::: {} \+
请注意,GNU Parallel 还使用 {}
来指定输入参数。但是,在这种情况下,我们使用 {.}
删除扩展名,如您的示例所示。您可以用 -I
覆盖 GNU Parallel 的替换字符串 {}
(例如,使用 -I@@
允许您使用 @@
而不是 {}
)。
我建议使用 GNU Parallel 的 --dry-run
标志或在 unzip
前面加上 echo
来先测试命令,看看会执行什么。