2016-12-22 10 views
0

bashスクリプトでコマンドの名前を変更しようとしています。私は、例えば、実行する場合:ファイル名の変更はコマンドプロンプトでは有効ですが、bashスクリプトでは機能しません。

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

それは正常に動作し、ディレクトリ/home/scientist/mySalesData/に私campaignData.csv与えます。私はbashスクリプトでこれを置けば

はしかし、次のように:

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 

は私が取得:

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

は、すべてのヘルプははるかに高く評価されるだろう!

+1

あなたは単純なタイプミスがあります。 '$ f $'を '' $ f "'に変更し、欠落した ''を追加してください。 –

+0

私はこれを夜遅くにやっています。 – user1357015

答えて

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

%strip shortest suffix patternオペレータです。

+0

ああ、きちんとしている。そのオペレータで何か新しいことを学びました。 – user1357015

2

あなたがここに$末尾います

echo $f$ 

はそれを削除(および拡張を引用):

echo "$f" 

あなたもここに文字列を使用することができます。

sed ... <<<"$f" 
関連する問題