qua*_*asi 2 linux bash shell posix find
我正在尝试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 {}) \;
我还尝试了反引号和引用整件事的各种方式。似乎没有任何效果。
您的方法不起作用,因为$(basename {})
是在find
调用之前执行的(在调用命令之前评估参数中的外壳扩展)。find
像这样使用:
find /path/to/pdfs -iname "*.pdf" -exec bash -c \
'dest=$(basename "$1"); pdftotext "$1" ~/Desktop/texts/"${dest%.*}.txt"' _ {} \;
Run Code Online (Sandbox Code Playgroud)
请注意,如果搜索目录中存在具有相同基本名称的 pdf 文件,则某些目标文件可能会被覆盖。