2014-11-04 67 views
0

我認爲標題應該解釋清楚我正在嘗試做什麼。我很新的shell腳本,並設法把一些代碼在一起,但它是不正確的 - 我的電腦上的每個文件正在上市如何使用Shell腳本以遞歸方式遞歸地列出文件夾中所有圖像的尺寸?

我也理想地喜歡檢查所有圖像類型(至少jpg,png和gif)

find "$1" -name ".jpg" | while read imagePath ; do 
imageFile=$(basename "$imagePath") 
dimensions=$(sips -g pixelHeight -g pixelWidth *) 
echo "$videoFile: $dimensions" done 

任何人都可以幫忙嗎? 謝謝!

+0

你什麼錯誤?你不使用imageFile,這很好,因爲對basename的調用是不必要的,而你在'done'之前缺少';'。否則,它在語法上看起來很好。 – 2014-11-04 11:47:20

+0

感謝您的快速回復William,我沒有收到錯誤,我需要過濾掉非圖像文件。將更新我的問題,對不起! – alidrongo 2014-11-04 11:54:12

回答

4

這應該很好地爲你工作:

#!/bin/bash 

find . \(-iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" \) -print0 | \ 
    while read -d $'\0' -r image; do 
     read w h < <(sips -g pixelWidth -g pixelHeight "$image" | \ 
     awk '/Width:/{w=$2} /Height:/{h=$2} END{print w " " h}') 
     echo $image $w $h 
    done 

樣本輸出

./start2.png 640 480 
./step2.gif 1 3918 
./step2.jpg 1 3918 
./step3.gif 2551 1 
./survey.gif 2651 4018 
./t.jpg 1 463 
./tiger.png 258 296 

保存上述在一個名爲pics文件,然後去到終端,然後鍵入以下一個時間使其可執行:

chmod +x pics 

然後,當你要運行它,只需鍵入:

./pics 

不過,就個人而言,我寧願ImageMagick的過SIPS,因爲你可以做同樣的事情在同一行:

identify -format "%f: %wx%h\n" *.jpg *.gif *.png 

樣品輸出

7T6Dj.jpg: 1920x1080 
a.jpg: 400x463 
b.jpg: 400x463 
back.jpg: 906x603 
background.jpg: 906x603 

如果你想在Mac上安裝的ImageMagick的 - 使用homebrew和它簡單。

更新回答

如果你只是想輸出的每個圖像大小一次,忽略了與相同尺寸的第二次及以後的圖像,你可以在最後像這樣添加一些awk

#!/bin/bash 

# Find all types of imagery GIF, JPG, PNG 
find . \(-iname "*.jpg" -o -iname "*.png" -o -iname "*.gif" \) -print0 | \ 
    while read -d $'\0' -r image; do 
     read w h < <(sips -g pixelWidth -g pixelHeight "$image" | \ 
     awk '/Width:/{w=$2} /Height:/{h=$2} END{print w " " h}') 
     echo $image $w $h 
    done | awk '{w=$(NF-1); h=$(NF); if(!seen[w SUBSEP h]++)print $0}' 
+0

嗨,這是偉大的,雖然我得到一個錯誤,看起來像一個錯字:image_dimensions.sh:第5行:語法錯誤附近意想不到的標記'<' 此外 - 要清楚我正在運行腳本通過鍵入sh imagedimensions .sh/path/to/FolderOfImages – alidrongo 2014-11-04 14:00:29

+0

不,它是'bash'。保存在一個名爲'pics'的文件中,然後在終端中輸入'chmod + x pics'使其成爲可執行文件,然後運行它:'。/ pics' – 2014-11-04 14:03:44

+0

很棒!非常感謝。還有一個問題 - 每次有一幅以前沒有列出的尺寸圖像時,我怎麼可能只回聲? – alidrongo 2014-11-04 14:12:40

0

我找不到sips所以根據上面的答案,這個一行代碼適用於我:

$ identify -format "%f: %wx%h\n" *.jpg *.gif *.png | cut -d: -f2 | sort -u | sed 's/x/\t/g' 

這輸出在當前目錄中的filesizes的寬度,高度製表符分隔的列表(我想看看我有多少不同尺寸的圖像在我的目錄)

909 503 
924 503 

筆記

實施例輸出,第一部分:

jobs8.png: 909x503 
jobs.png: 909x503 
lobstr.png: 924x503 

第二部分,切出的文件名:

909x503 
909x503 
924x503 

刪除重複:

909x503 
924x503 

與漂亮的標籤製作:

909 503 
924 503