2017-09-20 44 views
-1

我有一個網站httracks,並且生成了很多不同級別的文件。但該網站使用picture/source標籤srcset屬性httrack不處理,所有這些圖片不能很好地離線。來自httrack的錯誤srcset屬性

httrack如果使用選項Attempt to detect all links (even in unknown tags/javascript code)(在winhttrack中)並將所有圖像複製到本地存儲,可以看到鏈接。但它並沒有改變通往親戚的道路。

現在我需要一個可以編輯所有html文件的腳本(powershell/gnu bash),以便將srcset中的路徑修改爲正確的相對路徑。

我的想法是將每個文件夾遞歸爲../作爲插入/替換sed的參數。

做什麼:

示例文件:

index.html 
cat1/product1.html 
cat2/option3/product5.html 

每個包含像一些圖片標籤:

<picture> 
    <source srcset="/images/img1_low.jpg, /images/img1_low_ret.jpg x2" media="(max-width: 470px)"> 
    <source srcset="/images/img1_med.jpg, /images/img1_med_ret.jpg x2" media="(max-width: 960px)"> 
    <source srcset="/images/img1_hi.jpg, /images/img1_hi_ret.jpg x2" media="(min-width: 961px)"> 
    <img src="../images/img1_hi.jpg" /> 
</picture> 

圖像標籤的路徑總是正確的,從httrack做內:(images/img1_hi.jpg,../images/img1_hi.jpg,../../images/img1_hi.jpg

但源代碼還必須包含匹配pathes:

index.html中

<picture> 
    <source srcset="images/img1_low.jpg, images/img1_low_ret.jpg x2" media="(max-width: 470px)"> 
    <source srcset="images/img1_med.jpg, images/img1_med_ret.jpg x2" media="(max-width: 960px)"> 
    <source srcset="images/img1_hi.jpg, images/img1_hi_ret.jpg x2" media="(min-width: 961px)"> 
    <img src="images/img1_hi.jpg" /> 
</picture> 
在CAT1/product1.html

<picture> 
    <source srcset="../images/img1_low.jpg, ../images/img1_low_ret.jpg x2" media="(max-width: 470px)"> 
    <source srcset="../images/img1_med.jpg, ../images/img1_med_ret.jpg x2" media="(max-width: 960px)"> 
    <source srcset="../images/img1_hi.jpg, ../images/img1_hi_ret.jpg x2" media="(min-width: 961px)"> 
    <img src="../images/img1_hi.jpg" /> 
</picture> 
在CAT2

/option3/product5.html:

<picture> 
    <source srcset="../../images/img1_low.jpg, ../../images/img1_low_ret.jpg x2" media="(max-width: 470px)"> 
    <source srcset="../../images/img1_med.jpg, ../../images/img1_med_ret.jpg x2" media="(max-width: 960px)"> 
    <source srcset="../images/img1_hi.jpg, ../../images/img1_hi_ret.jpg x2" media="(min-width: 961px)"> 
    <img src="../../images/img1_hi.jpg" /> 
</picture> 

我嘗試:

#!/usr/bin/bash 

function workfolder { 
    # $1 = current folder 
    # $2 = prefix upfolders 

    pushd $PWD 
    cd $1 

    for i in $(ls) ; do 
     if [ -d $i ] ; then 
      workfolder $i ../$2 
     fi 
    done 

    for i in $(ls *.html) ; do 
     sed -i 's/srcset="images/srcset="$2images/g' $i 
     sed -i 's/, images/, $2images/g' $i 
    done 

    popd 

} 

workfolder . 

預留太多錯誤的sed的替換$2沒有解決,但litteraly取代的。

回答

0
#!/usr/bin/bash 
function workfolder { 
    # $1 = current folder 
    # $2 = prefix upfolders 

    pushd $PWD > /dev/null 
    cd $1 
    echo "=====^ $PWD =====" 
    for i in $(ls) ; do 
     if [ -d $i ] ; then 
      workfolder $i ..\\/$2 
     fi 
    done 
    for i in $(ls *.html) ; do 
     echo " working on: $PWD/$i with $2" 
     sed -i 's/srcset="image/srcset="'$2'image/g' $i 
     sed -i 's/\,\ image/\,\ '$2'image/g' $i 
    done 
    popd > /dev/null 
    echo "=====v $PWD =====" 
} 

workfolder . 

陷阱是:在所有在sed命令使用$2(第一嘗試未展開),並在sed命令../作爲第二參數的表單中的正確轉義可用