我有一个简单的脚本:庆典:在文件名中的空白
#!/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