如何解决在find -exec中使用命令替换
我正在尝试使用find ;
提取一堆pdf文本:
pdftotext
但是,这不起作用,因为find /path/to/pdfs -iname "*.pdf" -exec pdftotext {} ~/Desktop/texts/{} \;
包含完整路径(并且路径可以不同)。所以我尝试使用{}
,但是basename
似乎并没有执行它。
find
我还尝试了反引号和引用整件事的各种方式。似乎什么都没有。
解决方法
您的方法不起作用,因为在调用$(basename {})
之前执行了find
(在调用命令之前先评估参数的shell扩展)。像这样使用find
:
find /path/to/pdfs -iname "*.pdf" -exec bash -c \
'dest=$(basename "$1"); pdftotext "$1" ~/Desktop/texts/"${dest%.*}.txt"' _ {} \;
请注意,如果在搜索的目录中有具有相同基本名称的pdf文件,则某些目标文件可能会被覆盖。
,使用-execdir
代替-exec
(如果您的find
实现支持)。这将使find
切换到包含文件的目录,然后使用该目录中的相对文件名来调用特定命令。
当然,此方法将从命令行中{}
的任何实例中丢失全部路径。其中包括pdftotext
生成的文件的目的地。但是,从您的描述来看,这似乎仍然是您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。