如何在 Bash 中处理后逐步重命名文件?

如何在 Bash 中处理后逐步重命名文件?

我有一组需要处理的文件,因此我倾向于在bashMac 和 Linux 中以编程方式执行此操作。由于我喜欢保留原始文件以防出现问题,因此我希望文件以增量方式重新编号,但我不知道实现此目的的正确bash构造。

这是一个例子。我有一组 .pdf 文件:

bulletinlois00.pdf
bulletinlois01.pdf
bulletinlois02.pdf
...
bulletinlois33.pdf

这些 PDF 尚未经过 OCR,因此我想使用 或 来遍历它们tesseract,但不是像那样ocrmypdf输出它们。这是使用相同文件集的另一个示例。我想使用 来遍历文件,但不是转到,而是我希望它是bulletinlois01.pdf01.pdfpdftotextbulletinlois01.pdfbulletinlois01.txt01.txt

我可以做一个cp+mv过程,或者grep替换名称中不需要的部分,但这似乎有点过度,让我对是否应该使用wait&&构造感到困惑。

有没有一种简单的方法可以使用bash, 和你能解释一下施工到底在做什么吗这样我就可以学习如何将其应用于我需要做的其他更复杂的处理?例如,也许我可以使用以下构造来输出名称

`date "+%H.%M.%S"`

以下是基本的脚本:

for f in *.pdf ; do
    tesseract -l fra "$f" "$f"_done.pdf
done

答案1

您可以通过从匹配的文件名中删除前缀和后缀来更好地控制生成的文件名。

这是实现这一目标的一种可能方法:

for matched_filename in bulletinlois*.pdf ; do

    # strip "bulletinlois" prefix from the filename
    tmp=${matched_filename#bulletinlois}

    # then strip ".pdf" suffix
    number=${tmp%\.pdf}

    tesseract -l fra "$matched_filename" "$number"_done.pdf
done

本例中的剥离是使用 bash 完成的shell 参数扩展

要了解有关 shell 参数扩展的更多信息,请访问这篇博文或者官方 bash 文档

相关内容