0

我们一直在捕获文件并将其发送到 REST 服务器,并从工具栏将它们保存为 PNG 扩展名,现在有近 50 万个文件。

最近我们发现它们实际上是保存为 base64 流文件而不是 PNG 格式。

我有一个 python 脚本可以转换它们但不是递归的并且不使用通配符。

ImageMagick 说 base64 文件太大(最大 5K),因此无法转换。

 IE;  /bin/base64-to-png.py <base64_file_name>.png <output_name.png>

目录路径 /mnt/s3/pages/ 其中“pages”有数千个编号的文件夹。

 IE; /mnt/s3/pages/100 

   "pages" subfolders are never more than 1 folder deep.
   The files are typically 5540_thumb.png, 5540_snapshot.png and 5540_crop.png 
   where the 5540 is the capture number.

我需要一个 BASH 脚本包装器以使其在文件夹中重复,将所有原件复制到备份文件(filename.b64)并将通配符作为正确的路径/名称传递给 python 脚本,转换文件并将输出文件保留在相同的相应文件中文件夹然后使用 mogrify 压缩它们。

 IE;  base64-to-png.sh *_snapshot.b64 *_snapshot.png <compression number>

  should

    cp <file_name.png> <file_name>.b64
    /bin/base64-to-png.py <file_name.png> <file_name.png>
    mogrify -quality <compression number> -format png <file_name.png>
4

2 回答 2

0

试试这个脚本

#!/bin/bash
SEARCHPATH=$1
COMNUM=$2
FINDEXT="*.png"

for f in `find $SEARCHPATH -type f -name $FINDEXT` ; do
     #just get files name without extension
     fname=`echo $f | cut -d'.' -f1` 
     #perform operations
     cp $f ${fname}.b64
     /bin/base64-to-png.py $f $f
     mogrify -quality $COMNUM -format png $f

done

你可以称之为

$ base64-to-png.sh /somepath/tofind 100

param 1 : path where to find `.png` files 
param 2 : compression number.

这假设/bin/base64-to-png.py可以在绝对路径上工作,例如/somepath/somedir/somefile.png不仅仅是somefile.png

警告:未进行任何质量检查,请自行承担风险!

于 2012-10-05T06:49:54.507 回答
0

将文件名从 png 更改为 base64:

shopt -s globstar
shopt -s nullglob

对于 *.png **/*.png 中的文件;做
    if (file "${file}" | fgrep "ASCII" >/dev/null 2>&1); 然后
        # 文件名为 '.png' 但为 ASCII,移动它。
        b64name="${file%.*}.b64"
        mv -f "${file}" "${b64name}"

        # 将 $b64name 转换为 $file 的插入命令

        # 我认为这会起作用
        base64 -d "${b64file}" > "${file}" || echo "${b64file} 转换失败"
        mogrify -quality -format png "${file}"
    菲
完毕

由于诸如此类的原因globstar,我相信这将需要 bash 4.0+。你可以找到你的版本bash --version

如果您使用 python 进行 base64 转换至关重要,请随时交换命令。

于 2012-10-05T18:48:52.417 回答