将目录中的许多.pdf文件转换为.txt文件



我在一个目录中有一千多个文件,我想将它们转换为文本文件。我使用下面这样的代码,首先去掉文件名中的空格,然后将文件转换为文本:

/垃圾桶/垃圾桶

   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{}\;

最新更新