在find -exec中使用命令替换

准:

我正在尝试pdftotext使用find 提取一堆pdf文本

find /path/to/pdfs -iname "*.pdf" -exec pdftotext {} ~/Desktop/texts/{} \;

但是,这不起作用,因为{}包含完整路径(并且路径可以不同)。所以我尝试使用basename,但是似乎没有被执行find

find /path/to/pdfs -iname "*.pdf" -exec pdftotext {} ~/Desktop/texts/$(basename {}) \;

我还尝试了反引号和引用整件事的各种方式。似乎没有任何作用。

内贾特·艾丁(M. Nejat Aydin):

您的方法行不通,因为$(basename {})会在find调用之前执行(在调用命令之前先评估参数)。find像这样使用

find /path/to/pdfs -iname "*.pdf" -exec bash -c \
'dest=$(basename "$1"); pdftotext "$1" ~/Desktop/texts/"${dest%.*}.txt"' _ {}  \;

请注意,如果在搜索的目录中存在具有相同基本名称的pdf文件,则某些目标文件可能会被覆盖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章