2010-12-06 31 views
0

我正在尝试编写一个脚本来通过一组删除破折号和空格的文件名,然后在文件扩展名之前添加一个后缀。下面是一组文件:将字符串操作分配给Bash中的变量的问题

[email protected]:~/matlab/chiroping/workspace/myFunctions/labellings/Panama20090322new$ ls Me* 
Measurements 2009-03-22 Session6.xml   Measurements Panama 2009-03-22 Session4.xml 
Measurements Panama 2009-03-22 Session10.xml Measurements Panama 2009-03-22 Session5.xml 
Measurements Panama 2009-03-22 Session1.xml Measurements Panama 2009-03-22 Session6.xml 
Measurements Panama 2009-03-22 Session2.xml Measurements Panama 2009-03-22 Session7.xml 
Measurements Panama 2009-03-22 Session3.xml Measurements Panama 2009-03-22 Session8.xml 

所以这里的是通过一组文件的那张脚本,删除破折号和白色的空间,但是这是因为如果变量“VAR2”没有得到重置为表达下面。它最初设置为“tempSTR”,并保持如此。

[email protected]:~/matlab/chiroping/workspace/myFunctions/labellings/Panama20090322new$ for f in Me*; 
do var1=${f//[ -]/}; var2= echo -n $var1 | cut -f1 -d '.'; 
suffix="new"; var3= echo $var2; done 
    Measurements20090322Session6 
    tempSTR 
    MeasurementsPanama20090322Session10 
    tempSTR 
    MeasurementsPanama20090322Session1 
    tempSTR 
    MeasurementsPanama20090322Session2 
    tempSTR 
    MeasurementsPanama20090322Session3 
    tempSTR 
    MeasurementsPanama20090322Session4 
    tempSTR 
    MeasurementsPanama20090322Session5 
    tempSTR 
    MeasurementsPanama20090322Session6 
    tempSTR 
    MeasurementsPanama20090322Session7 
    tempSTR 
    MeasurementsPanama20090322Session8 
    tempSTR 

我认为这有什么不对这一行

var2= echo -n $var1 | cut -f1 -d '.'; 

试图VAR2设定打印出好的开始

最佳,

+1

`var = echo“a”`在你的bash中工作吗?在我的它不是。 var =``echo“a”`` – khachik 2010-12-06 14:45:56

回答

1

什么你”的表情时,重做没有任何意义。这是你的脚本:

for f in Me* ; do 
    var1=${f//[ -]/}; 
    var2= echo -n $var1 | cut -f1 -d '.' 
    suffix="new" 
    var3= echo $var2 
done 

您声明var2为的echo -n运行是空的,后来var3,为的echo运行是空的,而你正在申报suffix是“新”,但你永远不使用这些变量。也许你的意思

for f in Me* ; do 
    var1=${f//[ -]/}; 
    var2=$(echo -n $var1 | cut -f1 -d '.') 
    suffix="new" 
    var3=$(echo $var2) 
done 

但在这里你还从来没有使用$suffix$var3。我最好的解释是你打算写。

suffix="new" 
for f in Me* ; do 
    var1=${f//[ -]/}; 
    echo -n $(echo $var1 | cut -f1 -d '.') 
    echo -n $suffix. 
    echo $var1 | cut -f2- -d '.' 
done 

但是,这仍然是不这样做时,你可以只说一个非常合乎逻辑的方式..

suffix=new 
for f in Me* ; do 
     f="${f//[ -]}" 
     f="${f/./${suffix}.}" 
     echo $f 
done 
0

如何使用Python?

#!/usr/bin/python 
import os 
directory = "/home/foo/bar" 
for f in os.listdir(directory): 
    if a[0:2] != "Me": 
    continue 
    parts = f.rsplit(".", 1) 
    newname = parts[0].replace(" ", "").replace("-", "") + "." + parts[1] 
    os.rename(f, newname) 
相关问题