我检查文件夹内是否存在某种特定类型的文件以小写扩展名,然后以这种方式提取内容:
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
以避免以-
.