Bash 脚本:如何获取文件名/路径

Bash 脚本:如何获取文件名/路径

假设我想将要打开的 PPT 文件与一个 bash 脚本关联起来,该脚本将其转换为 PDF,然后使用适当的 PDF 编辑器打开它。我该怎么做?

转换将使用 uniconv 完成,正如我从中学到的另一个问题

uniconv -f pdf presentation.odt

我认为我必须将“presentation.odt”更改为触发此脚本的文件名

答案1

您的意思是脚本将以(例如)presentation.odt作为参数调用吗?参数在脚本中可用"$1"(如果文件名包含空格等字符,则需要双引号,否则 shell 会将其扩展)。您可以通过删除后缀来构造 PDF 文件的名称.odt${1%.odt}。请注意,它是,而不是不相关的。unoconvuniconv

#!/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无限制进程)。

相关内容