假设我想将要打开的 PPT 文件与一个 bash 脚本关联起来,该脚本将其转换为 PDF,然后使用适当的 PDF 编辑器打开它。我该怎么做?
转换将使用 uniconv 完成,正如我从中学到的另一个问题
uniconv -f pdf presentation.odt
我认为我必须将“presentation.odt”更改为触发此脚本的文件名
答案1
您的意思是脚本将以(例如)presentation.odt
作为参数调用吗?参数在脚本中可用"$1"
(如果文件名包含空格等字符,则需要双引号,否则 shell 会将其扩展)。您可以通过删除后缀来构造 PDF 文件的名称.odt
:${1%.odt}
。请注意,它是,而不是不相关的。unoconv
uniconv
#!/bin/sh
unoconv -f pdf "$1"
appropriate-pdf-editor "${1%.odt}.pdf"
答案2
在 shell 脚本中,可以通过变量 1、2、3、... 访问命令行参数,例如
#!/bin/bash
echo "$1"
echo "$2"
echo "$3"
# ...
如果需要的话,“$0”代表脚本名称本身。
您还可以重新分配这些变量和shift
它们,以访问超过 9 个参数。
答案3
如果您想找到所有.odt
文件并将它们输入到unoconv
,您可以使用该find
工具找到所有文件,然后将其输入到xargs
,这样可以进行并行处理。
find * -type f -iname "*.odt" | xargs -i -P12 "uniconv -f pdf {}"
这将以find
递归方式将运行目录中的所有文件传输到管道中找到的文件xargs
,最多可同时运行 12 个进程(用于-P0
无限制进程)。