我在一个目录中有一千多个文件,我想将它们转换为文本文件。我使用下面这样的代码,首先去掉文件名中的空格,然后将文件转换为文本:
/垃圾桶/垃圾桶
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;
但是,此代码将类似于I love you.pdf的文件转换为I_love_you.pdf.txt。我想删除最终文件扩展名的.pdf部分。
我最喜欢的方法是使用替换来修改扩展:
pdftotext -layout "$target" "${target/%.pdf/.txt}"
这里的%
意味着只在字符串的末尾匹配。
您的问题是:
$target = "i_love_you.pdf"
因此
$target.txt = "i_love_you.pdf.txt"
请注意,如果您不向pdftotext
提供第二个参数,它将默认地将file.pdf转换为files.txt,这似乎非常适合您的要求。
使用"basename
",例如
basename "i_love_you.pdf" ".pdf" returns "i_love_you"
请参阅如何从Bash中的路径字符串中删除文件后缀和路径部分?
另一个选项可能是:
查找。/-name"*.pdf"-exec pdftotext{}\;