我有一個簡單的腳本:慶典:在文件名中的空白
#!/bin/sh
cd /tmp/pics
for pic in *.jpg;
do
php -f /tmp/pics/covert.php $pic;
done
當我的照片在他們的名字空格該腳本將無法正常工作。我怎麼能解決這個問題?
我該如何修復我的腳本以正確處理空白,並且還處理其他JPEG擴展名,例如「JPG」,「JPEG」,「jpeg」?在bash
和另一個外殼
我有一個簡單的腳本:慶典:在文件名中的空白
#!/bin/sh
cd /tmp/pics
for pic in *.jpg;
do
php -f /tmp/pics/covert.php $pic;
done
當我的照片在他們的名字空格該腳本將無法正常工作。我怎麼能解決這個問題?
我該如何修復我的腳本以正確處理空白,並且還處理其他JPEG擴展名,例如「JPG」,「JPEG」,「jpeg」?在bash
和另一個外殼
競標規則是不像那些「正常」的腳本語言如Ruby和Python和Perl,所以這可能首先是混亂的,但如果你把周圍$pic
雙引號,bash將處理的內容該變量正確,即使它包含空格。
那一個修復將使你的腳本看起來像這樣
#!/bin/sh
cd /tmp/pics
for pic in *.jpg;
do
php -f /tmp/pics/covert.php "$pic";
done
我也將在每一行的末尾刪除分號。只有當你在一條線上連接多條線時才需要這些。他們不需要用他們在PHP或JavaScript(在較小程度上)的方式進行打擊。
正如所寫,這是使用Bourne shell而不是bash。 (目前我們將忽略bash可能會在系統上用來模擬Bourne shell的事實)。如果您想使用bash,請更改頂部的「shebang」行。通常它是#!/bin/bash
。
要處理多個文件擴展名,你可以堆疊起來彼此相鄰用空格之間,像這樣的
for pic in *.jpg *.jpeg *.JPEG *.JPG
正如延斯所指出的,你可能有奇怪的角落情況下,文件擴展名是混合的情況。您可以處理與括號字符組
for pic in *.[jJ][pP][gG] *.[jJ][pP][eE][gG]
或者你可以使用設置你的殼選擇忽略大小寫(和non-matching patterns),然後使用一個簡單的glob模式
shopt -s nocaseglob nullglob
for pic in *.jpg *.jpeg
如果我們的格倫的方法採取後一種方法,最終腳本看起來像這樣:
#!/bin/bash
cd /tmp/pics
shopt -s nocaseglob nullglob
for pic in *.jpg *.jpeg
do
php -f /tmp/pics/covert.php "$pic"
done
希望這有助於!
雙引號,順便說一句。單引號不適用於參數替換。 – Jens
它在PHP中很相似,因爲它在引用時不會將它們視爲文字。但是你是對的,你只是在談論正常的腳本語言。 :) – lynxlynxlynx
@Jens:是的,我應該澄清一點。在(與電腦無關的)美式英語中,「引號」表示雙引號,但我認爲它可能與英式英語相反,因此大部分英語世界......將修復... – iconoclast
對於短的腳本這樣我會用
#!/bin/sh
cd /tmp/pics
for pic in *.[jJ][pP][gG] *.[jJ][pP][eE][gG]; do
php -f /tmp/pics/covert.php "$pic"
done
這種處理甚至怪異的駝峯規則的擴展名如prettygirl.JpeG
:-)
使用bash,做不區分大小寫的文件匹配:
shopt -s nocaseglob nullglob
for pic in *{jpg,jpeg}
do
php5 -f ./convert.php "$pic"
done
謝謝,這是工作! – SubZeroFX
圍繞''$ pic''嘗試語音標記。 – Orbling
在空白區域遇到問題時添加引號 –
此處不需要分號。 – Jens