bash - grep 所有 odt 文件并将它们通过管道传输到 odt2txt

标签 bash shell

我想递归地获取某个文件夹中的所有 .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/

相关文章:

bash - 在 Go makefile 中使用 bash 命令

linux - bash - 编写函数语法的两种方式

bash - 设置 JAVA_HOME 以反射(reflect) jenv java 版本

bash - 如何在shell的if条件下找到选项

bash - 从文件读取时如何在 while 循环内读取输入?

c - 读取损坏的文件,段错误

shell - sed 在正则表达式中给出未终止替换的错误

linux - 将 awk 脚本合并到 ksh 脚本中

linux - hive 脚本(hivequery.hql)文件中的这个符号是什么意思 "use ${word:word}"

python - 处理 sshpass 密码字段中的特殊字符