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

jom*_*web 0 bash

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

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

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

然后转换

for word in *.doc
    do
        text_doc=""$(basename "$word" .doc)
        sudo catdoc $word > $text_doc".txt"
    done
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*nda 5

一些事情:

如果我理解正确,您希望将所有*.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
Run Code Online (Sandbox Code Playgroud)

或者更短:

shopt -s nullglob
for doc in ./*.DOC; do
    catdoc "$doc" >"${doc%.DOC}.txt"
    mv "$doc" "${doc%.DOC}.doc"
done
Run Code Online (Sandbox Code Playgroud)
  • ${doc%.DOC}使用${parameter%word}的参数扩展bash(或任何POSIX壳),以除去.DOC来自于文件名的后缀$doc
  • 如果没有带有后缀的文件,设置nullglobshell 选项将确保没有任何匹配。如果没有设置,我会得到的字符串中,如果没有文件。*.DOC.DOC*.DOC$doc.DOC
  • 使用./前缀 in./*.DOC可以避免文件名以-.