我有以下脚本,它获取某些目录的绝对路径并将它们通过管道传输到 GNU 中进行parallel
压缩。我不断收到 signal 13 错误,但我不知道为什么。
find $directory -maxdepth 1 | \
grep -v "^${directory}$" | \
xargs realpath | \
parallel -j 4 zip -r ${new_directory}/{/.}.zip {}
错误是terminated with signal 13; aborting
。有时不会引发错误,但输出中不存在 zip 文件new_directory
。
任何帮助,将不胜感激。
答案1
在解决您遇到的实际故障之前,您需要在命令中修复一些事情来处理一些极端情况
find "$directory" -maxdepth 1 -mindepth 1 -print0 | \
xargs -0 realpath | \
parallel -j 4 zip -r "$new_directory"/{/.}.zip {}
变化find
有:
-mindepth 1
- 这将排除您的顶级目录,因此您不需要命令grep -v
。-print0
- 这将解决任何文件包含空格或任何转义字符的可能问题。所有文件都将由空字符而不是新行分隔。
这就是为什么您还需要将 添加 添加-0
到命令中xargs
,以便它将读取由空字符分隔的输入。
进一步排除故障
如果它不能解决您的问题,您需要进一步调试。
首先,
parallel
完全删除该命令并检查该命令的输入是否符合预期。如果看起来没问题,请在
parallel
命令中添加详细信息以准确捕获其正在执行的操作:
parallel -t -j 4 zip -r ${new_directory}/{/.}.zip {} 2> parallel.log
- 然后您将获得它在文件中运行的命令列表
parallel.log
。检查zip
命令是否生成正确。
- 如果您在日志文件中的命令列表中仍然没有看到任何异常,
zip
请尝试该文件中的命令:
bash -x parallel.log
在此过程中的某些时候,您必须查看在哪个阶段收到错误。