使用 shell 脚本提取 .ppt 文件中的幻灯片数量

Using shell script to extract the number of slides in a .ppt file

我在JAVA中找到了this实现,但我想知道是否可以获取ppt文件中幻灯片的数量?如果是这样,是否类似于在 pptx 文件中执行相同的操作?

-查看脚本文件所在目录 -检测并统计一个ppt文件中的幻灯片数量 - 获取该数字并将其附加到 CSV 文件

我找到了一个 bash 脚本,它可以执行类似的操作,但用于 PDF 文件

#!/bin/bash 
saveIFS=$IFS
IFS=$(echo -en "\n\b")

myFiles=($(find . -name "*.pdf"))
totalPages=0

echo "file path, number of pages" > log_3.csv
for eachFile in ${myFiles[*]}; do
  pageCount=$(mdls $eachFile | grep kMDItemNumberOfPages | awk -F'= ' '{print }')
  size=${#pageCount}

  if [ $size -eq 0 ]
  then
    # these files had no entry for kMDItemNumberOfPages
    # comment out the next line to not list these files
    echo $eachFile : \*\* Skipped - no page count \*\*
  else
    # comment out the next line if you don't want to see a count for each file
    echo $eachFile, $pageCount >> log_3.csv
    totalPages=$(($totalPages + $pageCount))

  fi
done

echo "Total number of pages, ${totalPages}" >> log_3.csv
echo Total pages: $totalPages

IFS=$saveIFS

我们能否重构此代码以使其适用于 ppt 文件?

谢谢!

让我回答你一半的问题。
关于 pptx 个文件,您可以获得幻灯片的数量:

#!/bin/bash

function pagecount() {
    local pptx=
    local pagecount line
    while read -r line || [[ -n "$line" ]]; do
        if [[ "$line" =~ \<Slides\>([0-9]+)\</Slides\> ]]; then
            pagecount="${BASH_REMATCH[1]}"
        fi
    done < <(unzip -j -p "$pptx" "docProps/app.xml")
    echo "$pagecount"
}

for file in *.pptx; do
    count=$(pagecount "$file")
    echo "${file} : ${count} pages"
done

与其他 MS Office 2007+ 文件(docxxlsx、...)一样,pptx 文件格式只是一个 zip 压缩的 XML 文件.您可以在 docProps/app.xml 文件中以 <Slides>n</Slides>.
的形式找到幻灯片计数 上面的代码用于将 docProps/app.xml 解压缩到标准输出,然后将其解析为 Slides 属性.

关于ppt文件,文件格式与pptx完全不同,您可能需要引入一些外部工具(wvWare或类似的东西)处理它。

这是我的脚本,根据 tshiono 的回答计算目录中所有 .pptx 文件的页数。

#!/bin/bash

function pagecount() {
  for file in *.pptx; do
    count=$(unzip -j -p "$file" "docProps/app.xml" |  grep -o -P '(?<=\<Slides\>).*(?=\</Slides\>)')
    echo "${file} : ${count} pages"
  done
}