Unix Shell脚本:如何相应地修改输出文件名

时间:2013-03-21 05:39:07

标签: shell unix scripting

所以我当前的shell脚本是:

for j in *.jpg
do
  tesseract $j $j
done

其中tesseract将jpg文件转换为文本文件。 使用此脚本,如果有文件HAHA.jpg,则输出文件名称变为, HAHA.jpg.txt但我希望它只是HAHA.txt

有没有办法让输出文件名为HAHA.txt而不是HAHA.jpg.txt?

3 个答案:

答案 0 :(得分:2)

如果您有一个shell变量j,您可以删除与给定模式匹配的后缀,如下所示

${j%%.jpg}

其中%%表示应删除最长匹配后缀,.jpg为模式(“一个点,后跟三个字母:j,p和g”)。

答案 1 :(得分:0)

在tesseract命令后添加此行:

for j in *.jpg
do
  tesseract $j $j
  mv ${j}.txt  ${j/jpg/txt}
done

即使tesseract已重命名您的文件,变量$j也将包含HAHA.jpg。

答案 2 :(得分:0)

使用basename:

for j in *.jpg
do
  tesseract $j $(basename -s .jpg $j)
done