我想递归地获取某个文件夹中的所有 .odt
文件,提取它们的文本内容并从中创建 .txt
文件(相应地命名,所以 A.odt -> A.txt)
问题是,除了一些技巧外,我对 shell 并不擅长。
grep 很简单:grep -r -i --include\*.odt .
odt2txt 的联机帮助页说,我需要指定 --output=FILE
因此对于一个文件,它将是 odt2txt A.txt --output=A.txt
这就像一个魅力。但是如何将这两者结合起来呢?
我在这里遇到两个问题,通常我会像这样用管道链接我的命令(同样,shell noob)
grep -r -i --include\*.odt 。 | odt2txt $INPUT_FROM_GREP --output=$MISSING_NAME
但是正如您所看到的,odt2txt 想要文件名作为第一个参数,以及如何在没有 odt2txt
使用的扩展名的情况下获取名称?
我觉得我走的路不对。
最佳答案
grep
用于查找文件中的匹配行,但您似乎只想查找名称与特定模式匹配的文件。为此,可以使用 find
。另外,我假设 odt2txt
希望 A.odt
作为第一个参数,而不是 A.txt
。
我会使用 find
来查找文件,然后使用它的 -exec
选项来执行 odt2txt
。我会使用 basename
去除 .odt
扩展名,然后添加 .txt
。所以,像这样:
find . -name '*.odt' -exec odt2txt {} --output=`basename {} .odt`.txt ";"
请注意,在 -exec
之后,{}
表示文件名,要执行的命令结束由 ";"
.
关于bash - grep 所有 odt 文件并将它们通过管道传输到 odt2txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017009/