2010-12-06 11 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 

OKプリントアウト式にVAR2を設定しようとしたとき、私は

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

このラインに問題があると思い、最初は

ベスト、

+1

あなたのbashで 'var = echo" a "は動作しますか?私の場合はそうではありません。 var = '' echo "a" '' – khachik

答えて

1

何」やり直しても意味がありません。ここにあなたのスクリプトは次のとおりです。

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

あなたは決してあなたがecho -nの実行のために空にすること、そして後でvar3echoの実行のために空にvar2を宣言されていない、とあなたは「新しい」こと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 

しかし、これはまだあなただけのPythonを使用することについてどのように..

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

を言うことができたときにそれを行うには非常に論理的な方法ではないでしょうか?

#!/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) 
関連する問題