2012-01-11 35 views
0

我試圖在數百個jpgs的Mac上將文件夾分類到單獨的文件夾中
pixelWidth/usr/bin/sips之後。當我運行腳本時,它顯示一個
Error 4: no file was specified。變量$f在第一行是空的?
我認爲for f in *jpg中的「f」在文件循環時引用了該文件。bash腳本在像素寬度後對JPEG進行排序

imgWid=$(/usr/bin/sips -g pixelWidth $f | sed -n 2p | cut -d":" -f2-) 

for f in *jpg; do if [ "$1" == "$imgWid" ]; then; mv $f $dir1 2>/dev/null; fi; done 

我希望能幫助我解決這個問題。

回答

2

$()在指定的位置運行命令。 (因此第1行),$f僅在循環中定義(第3行)。

可能:

function determineImageWidth() 
{ 
    /usr/bin/sips -g pixelWidth $1 | sed -n 2p | cut -dj":" -f2- 
} 

for f in *.jpg 
do 
    width=$(determineImageWidth $f) 
    if [ -n $width ] 
    then 
     mkdir -p $width 
     mv $f $width/ 
    else 
     echo "Can't determine the width for $f" 
    fi 
done 
+0

感謝您的回覆。我嘗試了你的建議,但沒有成功。跡線仍顯示空變量。只是爲了澄清我認爲我的問題是:)。當前目錄包含很多fex的jpgs。 3個已知寬度。所以我計劃使用'$ 1 $ 2 $ 3'的位置參數到'mkdir width $ 1'等來接收相關的jpgs並讓循環結束。如果您有任何其他想法,請回到我身邊。 – johne 2012-01-11 15:23:32

+0

@johne我建議根據需要創建目錄,因此您不需要將正確的參數傳遞給代碼。請發佈您的更新代碼,並輸出'bash -x ',以便我們可以看到發生了什麼。 – 2012-01-11 19:10:11

+0

'@ douglas'我支持我在昨天的嘗試中肯定錯過了你的代碼。今天早上我再次嘗試,你的腳本只是通過這些jpgs。謝謝!! – johne 2012-01-12 12:11:50

0

您沒有指定什麼$ F是在腳本的第一行。據我所知,它只是在for循環中指定的。 您可能想要在第一行中將$ f更改爲$ 1,以使用爲您的腳本提供的參數。

相關問題