我在目录中有超过一千个文件要转换为文本文件。我使用下面的代码首先取出文件名中的空格,然后将文件转换为文本:
find . -name '*.pdf' | while read file;
do
target=`echo "$file" | sed 's/ /_/g'`;
echo "Renaming '$file' to '$target'";
mv "$file" "$target";
chmod 777 *.pdf;
pdftotext -layout "$target" "$target.txt";
done;
但是,此代码会将我爱你.pdf 等文件转换为 I_love_you.pdf.txt。我想删除最终文件扩展名的.pdf部分。
答案 0 :(得分:1)
我这样做的首选方法是使用替换来修改扩展名:
pdftotext -layout "$target" "${target/%.pdf/.txt}"
%
表示只匹配字符串的末尾。
答案 1 :(得分:0)
你的问题是:
$target = "i_love_you.pdf"
因此
$target.txt = "i_love_you.pdf.txt"
请注意if you don't supply the second parameter to pdftotext
,它会默认将 file.pdf 转换为 file.txt ,这似乎完全符合您的要求。
答案 2 :(得分:0)
使用'basename
'例如。
basename "i_love_you.pdf" ".pdf" returns "i_love_you"
请参阅How do I remove the file suffix and path portion from a path string in Bash?
答案 3 :(得分:0)
另一种选择可能是:
find ./ -name" * .pdf" -exec pdftotext {} \;