2012-10-05 29 views
0

我們一直在捕獲文件並將其發送到REST服務器,並將它們從工具欄保存到PNG擴展中,現在有近50萬個文件。需要遞歸BASH腳本遍歷文件夾並使用通配符

最近我們發現他們實際上已經保存爲base64流文件而不是PNG格式。

我有一個python腳本,可以轉換它們,但不遞歸和connot使用通配符。

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腳本包裝,使其recusive防空火炮的文件夾,複製所有原稿的備份文件(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> 

回答

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

警告:沒有完成質量保證,使用它的風險!從巴紐的base64

+0

我相信在行中'$ FINDEXT'應該雙引號,對不對? –

+0

它不一定是。 – Rohan

+0

Rohan你的腳本工作正常,我只需要將FINDEXT =「*。png」更改爲命令行變量,這只是因爲需要將縮略圖文件壓縮到不同的比率 - 很多謝謝,這非常有幫助。 – user1213320

0

更改文件名:

 
shopt -s globstar 
shopt -s nullglob 

for file in *.png **/*.png; do 
    if (file "${file}" | fgrep "ASCII" >/dev/null 2>&1); then 
     # File is named '.png' but is ASCII, move it. 
     b64name="${file%.*}.b64" 
     mv -f "${file}" "${b64name}" 

     # Insert command that converts $b64name to $file 

     # I think this will work 
     base64 -d "${b64file}" > "${file}" || echo "Conversion failed for ${b64file}" 
     mogrify -quality -format png "${file}" 
    fi 
done 

到正當之類的東西globstar,我相信這將需要的bash 4.0+。你可以找到你的版本bash --version

如果你至關重要的是你使用python進行base64轉換,隨意交換命令。