2012-07-15 20 views
1

本質上,我想要做的是遞歸搜索工作目錄,然後使用給定的路徑來調整圖像大小。例如,查找所有* .jpg文件,將它們調整爲300x300並重命名爲whatever.jpg。如何使用find遞歸轉換JPG圖像?

我是否應該沿着$(find | grep *.jpg)的方向行動來獲取路徑?當我這樣做時,輸出是不用引號括起來的目錄,這意味着我必須在它們有用之前插入它們,對嗎?

+0

相關:http://stackoverflow.com/a/4321522/1301972 – 2012-07-15 18:56:45

回答

1

您可以使用像這樣用GNU發現:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} + 

這將在報價方面更安全,並釀出更少的過程。只要您的腳本可以處理參數列表的長度,此解決方案應該是最有效的選項。

如果您需要處理非常長的文件列表,您可能需要付出代價併產生更多的進程。您可以修改find​​來單獨處理每個文件。例如:

find . -iname \*jpg -exec /your/image/conversion/script.sh {} \; 
+0

謝謝,這有助於很多!問題是我需要將所有的東西編譯成一個* .sh文件,以便它可移植並且易於分發......有什麼方法可以在BASh腳本中調用函數嗎? – clappboard 2012-07-15 18:25:00

+0

當然。 Shell腳本執行命令,別名和函數,儘管一些*命令*更受限制。有關Bash函數的詳細信息,請參閱http://www.gnu.org/software/bash/manual/html_node/Shell-Functions.html。 – 2012-07-15 18:48:45

+0

謝謝!很有幫助 :) – clappboard 2012-07-15 19:10:42

5

我用mogrify找到

比方說,我需要在我的嵌套的文件夾中的一切/其它/文件夾/ * JPG是在*巴紐

find . -name "*.jpg" -print0|xargs -I{} -0 mogrify -format png {}

& &帶着幾分交代的:

find . -name *.jpeg - 查找嵌套文件夾中的所有jpeg。
-print0 - 打印所需的文件名withouth的安迪討厭的意外(例如:文件名分隔空間)
xargs -I {} -0 - 由一個與mogrify

並且最後處理文件中的一個的那些{}只是虛擬文件查找結果的名稱。