首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grep所有odt文件并将其输送到odt2txt

grep所有odt文件并将其输送到odt2txt
EN

Stack Overflow用户
提问于 2017-09-02 18:34:32
回答 4查看 642关注 0票数 2

我希望递归地获取某个文件夹中的所有.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使用扩展名。

我觉得我没有走上正确的轨道。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-02 18:53:10

grep用于查找文件中的匹配行,但您似乎只想找到名称与特定模式匹配的文件。为此,可以使用find。而且,我认为odt2txt希望A.odt作为第一个参数,而不是A.txt

我将使用find查找文件,然后使用它的-exec选项来执行odt2txt。我会使用basename去掉.odt扩展,然后添加.txt。所以,就像这样:

代码语言:javascript
复制
find . -name '*.odt' -exec odt2txt {} --output=`basename {} .odt`.txt ";"

注意,在-exec之后,{}表示文件名,要执行的命令的结尾由";"发出信号。

票数 3
EN

Stack Overflow用户

发布于 2017-09-02 18:49:16

使用findwhile

代码语言:javascript
复制
find . -name "*.odt" | while read f
do
  odt2txt "$f" --output="`dirname "$f"`/`basename -s ".odt" "$f"`.txt"
done

龙舌兰人:

代码语言:javascript
复制
find . -name "*.odt" | while read f; do odt2txt "$f" --output="`dirname "$f"`/`basename -s ".odt" "$f"`.txt"; done
票数 2
EN

Stack Overflow用户

发布于 2021-08-14 21:07:25

代码语言:javascript
复制
#/usr/bin/bash
for i in *.odt ; do ( if odt2txt $i| grep -i $1 ;  then echo $i; fi; ) ;done
代码语言:javascript
复制
apt install odt2txt 

别碰grep!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46017009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档