小写并将文件转换为文本,出现空的 *.txt 文件

小写并将文件转换为文本,出现空的 *.txt 文件

我检查文件夹内是否存在某种特定类型的文件以小写扩展名,然后以这种方式提取内容:

existDoc=""$(ls | grep .DOC | wc -l)

if [ $existDoc -gt 0 ]; then
    for file in *.DOC
    do
        mv $file $(basename "$file" .DOC)".doc"
    done
fi

然后转换

for word in *.doc
    do
        text_doc=""$(basename "$word" .doc)
        sudo catdoc $word > $text_doc".txt"
    done

问题是创建了一个名为“*.doc.txt”的新空文件,没有明显的原因。

答案1

有几件事:

如果我理解正确,您希望将所有*.DOC文件名的扩展名小写并用于catdoc创建它们的文本文件。

shopt -s nullglob
for doc in ./*.DOC; do
    new_doc="${doc%.DOC}.doc"
    txt_doc="${doc%.DOC}.txt"

    catdoc "$doc" >"$txt_doc"
    mv "$doc" "$new_doc"
done

或者甚至更短:

shopt -s nullglob
for doc in ./*.DOC; do
    catdoc "$doc" >"${doc%.DOC}.txt"
    mv "$doc" "${doc%.DOC}.doc"
done
  • 使用(或任何 POSIX shell)的参数扩展${doc%.DOC}从.txt 中的文件名中删除后缀。${parameter%word}bash.DOC$doc
  • 设置shell 选项将确保如果没有带有后缀的文件,则nullglob不会匹配任何内容。如果未设置,如果没有文件,我将获取字符串。*.DOC.DOC*.DOC$doc.DOC
  • 使用./前缀 in./*.DOC以避免以-.

相关内容