如何在脚本中使用括号?

时间:2013-08-25 15:22:16

标签: bash scripting

我创建了这个愚蠢的脚本:

#!/bin/bash
#archivo=0
for i in *.esp.srt
do
  iconv -f=ISO8859-1 -t=UTF-8 "$i" > "$i.srt"

done

但我必须先重命名文件才能正确执行脚本。如果调用该文件,例如:

“无论什么”(Español(España))。srt

它不起作用。

我已经尝试在我的脚本中更改此行:     for in in *(Español(España))。srt

但显然,我做错了,因为它不起作用。

编辑:当文件为* .esp.srt时,我的脚本有效。 但如果文件是*(Español(España))。srt

,它就不起作用

Edit2:现在可以了:

#!/bin/bash
#archivo=0
for i in *" (Español (España)).srt"
do
  iconv -f=ISO8859-1 -t=UTF-8 "$i" > "${i%% "(Español (España)).srt"}.esp.srt"
  rm *" (Español (España)).srt"
done

3 个答案:

答案 0 :(得分:1)

您可以尝试运行

detox *

之前。

请参阅http://detox.sourceforge.net/

答案 1 :(得分:1)

尝试这样的事情:

mkdir -p converted && \
for i in *.esp.srt *Esp*.srt
do
  iconv -f=ISO8859-1 -t=UTF-8 "$i" > "converted/$i"
done

另外,您如何真正希望转换文件名?您还应该知道,使用您的代码,您的输出将变为something.srt.srt。如果你想将你的扩展名替换为.utf8.srt之类的东西,那就这样做(假设你的文件以.esp.srt结尾):

for i in *.esp.srt
do
  iconv -f=ISO8859-1 -t=UTF-8 "$i" > "${i%%.esp.srt}.utf8.srt"
done

同样,您可以为"whatever" .(Español (España)).srt等文件添加另一个循环:

for i in *'.(Español (España)).srt'
do
  iconv -f=ISO8859-1 -t=UTF-8 "$i" > "${i%%'.(Español (España)).srt'}.utf8.srt"
done

答案 2 :(得分:1)

  

编辑:当文件为* .esp.srt时,我的脚本有效。但如果文件是*(Español(España))。srt

,它就不起作用
是的,是的。那是因为这一行

  

表示我在* .esp.srt

仅查找.esp.srt"whatever" (Español (España)).srt未结束的内容。如果你想使用

  

for i in *(Español(España))。srt

然后你需要考虑括号,正如你暗示的那样。把""放在它周围。