使用 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+ 文件(docx
、xlsx
、...)一样,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
}
我在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+ 文件(docx
、xlsx
、...)一样,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
}