2010-12-06 25 views
0

Je suis en train d'écrire un script pour passer par un ensemble de noms de fichiers supprimant les tirets et les espaces blancs, puis ajouter un suffixe avant l'extension de fichier. Voici l'ensemble des fichiers:allocation opération de chaîne à la variable dans 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 

Voici donc le script qui passe par l'ensemble des fichiers, supprime les tirets et les espaces, mais il est comme si « var2 » variable ne soit pas remise à l'expression au dessous de. Il est tout d'abord réglé sur « tempSTR » et le reste.

[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 

Je pense qu'il ya quelque chose de mal avec cette ligne

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

en essayant de mettre var2 à l'expression qui imprime ok initialement

Best,

+1

Est-ce que 'var = echo" a "' fonctionne dans votre bash? Dans le mien, il ne fonctionne pas. var = '' echo "a" '' – khachik

Répondre

1

Qu'est-ce que vous » ne faisons pas de sens. Voici votre script:

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

Vous déclarez var2 être vide pour la course de echo -n, et plus tard var3 être vide pour la course de echo, et vous déclarez suffix être « nouveau », mais vous ne utiliser ces variables. Peut-être que vous vouliez dire

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

Mais ici vous utilisez encore jamais $suffix ou $var3. Ma meilleure interprétation est que vous vouliez écrire.

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 

Mais ce n'est pas encore une très façon logique de le faire quand vous pourriez dire ..

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

Comment l'utilisation de 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)