
フォルダ内に小文字の拡張子を持つ特定の種類のファイルがあることを確認したら、次のようにコンテンツを抽出します。
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
いくつか:
- 出力を解析しません。
ls
。 - 変数参照。
sudo
?なぜ?
私が正しく理解したら、すべてのファイル名とファイル名を作成するために使用されたテキストファイル*.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シェル)を使用して、
${doc%.DOC}
.txtのファイル名からサフィックスを削除します。${parameter%word}
bash
.DOC
$doc
- シェルオプションを設定すると、サフィックス付きのファイルがなければ
nullglob
何も一致しません。設定しない場合、ファイルが存在しない場合は文字列を取得します。*.DOC
.DOC
*.DOC
$doc
.DOC
- で終わらないようにするには、
./
接頭辞inを使用してください。./*.DOC
-