2017-03-27 155 views
0

嗨,这是我的shell脚本,用于将文件从一个目录复制到另一个具有timestamp目录。但我的脚本显示的参数过多。我想将文件从一个目录复制到另一个目录。我的代码中有什么错误。用于将文件从一个文件夹复制到另一个文件夹的Unix Shell脚本

Date_Val="$(date +%Y%m%d%H%M%S)"; 

cd /etl_mbl/SrcFiles/ 

if [ -f /etl_mbl/SrcFiles/SrcFiles_TEMP*.csv ] 
then 
cp /etl_mbl/SrcFiles/SrcFiles_TEMP/*.csv /etl_mbl/SrcFiles/Archive/*_$Date_Val.csv 
fi 
+0

你想在新的位置追加时间戳文件名? – amudhan3093

回答

2

您得到“太多参数”错误的原因是“if”语句中的通配符扩展为大量文件。另请注意,您不能在“cp”的目的地中使用通配符。你可能想要这样的东西:

#!/bin/bash 

Date_Val="$(date +%Y%m%d%H%M%S)"; 

for file in ./src/*.csv; do 
    filename=${file##*/} 
    basename=${filename%.*} 
    cp $file ./archive/$basename\_$Date_Val.csv 
done 
+0

'。/'迷恋什么?这种情况对任何事物都有好处吗?引用$ file和目标文件名以避免分词和glob扩展也是一个好主意。 – Jens

+0

不,./不是必需的。应该指出的是,原始文章使用的绝对路径可能在大多数系统上无效。 –

相关问题