重命名文件名在命令提示符下工作,但在bash脚本中不起作用

时间:2016-12-22 06:39:17

标签: bash unix

我正在尝试在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          

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

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

%strip shortest suffix pattern运营商。

答案 1 :(得分:2)

您在此处有$

echo $f$

删除(并引用扩展名):

echo "$f"

你也可以在这里使用字符串:

sed ... <<<"$f"