renommer les noms de fichiers fonctionnent dans l’invite de commande, mais pas dans le script bash

J’essaie de renommer les commandes dans un script bash. Si je cours par exemple:

echo /home/scientist/mySalesData/campaignData_1482386214.24417.csv | sed 's/\(.*\)\(_.*\)/mv \"&" \"\1.csv\"/' | bash 

Cela fonctionne bien et me donne campaignData.csv dans le répertoire /home/scientist/mySalesData/ .

Cependant, si je mets ceci dans un script bash comme suit:

 for f in /home/scientist/SalesData/*; do if [ -f "$f" ]; cp "$f" /home/scientist/SalesForce/SalesData/Backups/ echo $f$ | sed 's/\(.*\)\(_.*\)/mv \"&" \"\1.csv\"/' | bash | fi done 

Je reçois:

 mv: cannot stat '/home/scientist/SalesData/campaignData_1482386214.24417.csv$': No such file or directory 

Toute aide serait très appréciée!

 cd "$srcdir" for f in *; do if [ -f "$f" ]; then cp "./$f" "$dstdir/${f%_*}.csv" fi done 

Le % est l’opérateur de modèle de suffixe de bande le plus court .

Vous avez un $ ici:

 echo $f$ 

supprimer cela (et citer l’extension):

 echo "$f" 

Vous pouvez utiliser ici ssortingng:

 sed ... <<<"$f"