2015-05-26 48 views
0

我想「優化」我所有的*。PNG圖像,發現this所以我做的是bash,因爲它與說:我怎麼能運行在一個基礎文件夾的子文件夾中的每一個bash

#!/bin/bash  
pngnq -vf -s1 *.png  
rename -f 's/-nq8.png$/.png/' *.png  
optipng -o7 *.png 

這裏我有兩個問題:

第一個是,第二行(重命名)什麼都不做......它應該改變名爲[name]-nq8.png的所有圖像,這是bash的第一行結果爲原始名稱

第二個也是主要的問題是:我有一個文件夾名爲ImagesFolder和裏面我有更多的* .pngs其他文件夾,我想運行這個bash在ImagesFolder的每個子文件夾,但我不知道如何做到這一點(我是在UNIX和shellcripts等新)和我試過沒有工作或者是一個爛攤子......

爲了更好的我有什麼理解是這樣的:

ImagesFolder 
    |-Folder1 
    |  |- Folder12 
    |  |  |-20 images here 
    |  |- Folder13 
    |  |  |- 10 images more here 
    |  |- 5 images here 
    |-more images 

而且我希望腳本運行從ImagesFolder

謝謝你真是太棒了!

+1

目錄層次結構中沒有「文件夾」。只有目錄,子目錄和文件。您可以命名一個目錄「Folder1」,但它仍然是一個目錄。 –

+2

@WilliamPursell:文件夾是目錄的同義詞.... –

+0

@Karoly,不,文件夾是gui的人造物。文件夾包含文件(或者其他一些非技術性的市場營銷快樂的無意義思考文件系統的內部結構的方式),但目錄不包含這些文件。目錄僅包含指向文件的鏈接,最好不要模糊區別。 –

回答

0

我可能會做的是:

1)固定腳本,以便它在當前目錄中取ARGS,而不是文件名匹配的:

#!/bin/bash  
pngnq -vf -s1 "$1"  
mv "${1%.png}-nq8.png" "$1" 
optipng -o7 "$1" 

2)測試它,它的作品如預期

3)在平行findxargs運行它(我想你有多核處理器)

find . -name '*.png' -print0 | xargs -0 -P6 -n1 the_script 

該腳本也可以內聯。但我的主要觀點是,如果您使用多核,則使用並行性。它會加速很多事情。

+0

它工作正常,所以很快!我會在後面看到xargs究竟做了什麼,但非常感謝你!你爲什麼重命名在我的情況下什麼都不做?我在fedora12上打電話 – Megasa3

+0

這是'-P6'參數,告訴它總是有6個進程在運行。您可以更改編號和/或添加'-n some_number'選項來調整每個腳本調用的參數數量(默認情況下會盡可能多)。像您這樣的CPU密集型任務是並行化的主要候選者。 – PSkocik

+0

重命名的'-v'(詳細)選項可能對調試很有用。你有沒有在一個參數上測試腳本? – PSkocik

2

通常,當您希望在目錄樹上遞歸執行某些操作時,您想使用的工具是find。如果你的腳本被命名爲foo

find /path/of/base/dir -type f -name '*.png' -exec foo {} \; 

將調用腳本在目錄樹的名字在.png結束每個常規文件。

相關問題