shell 文件拷贝

来源:互联网 发布:淘宝店铺刷钻多少钱 编辑:程序博客网 时间:2024/04/30 00:05

有个应用场景如下:目前有一套网盘系统的文件存储是在windows下按照目录结构按实际文件名称存储的,现在需要将该系统的文件迁移到linux系统中,且文件都存储在一个目录下,该目录不再包含子目录,目前一个解决方案是使用shell脚本来进行简单处理。

##原文件目录,需要解析的文件目录RESOURCEPATH="/home/hsinghsu/new"##将原文件拷贝到的目录,将文件统一拷贝到该目录TOPATH="/home/hsinghsu/to"##原系统文件上传的路径,用于拼接原文件在原系统中的绝对路径RESOURCEFLAG="D://upload"##原文件在linux系统的前缀,用于拼接原文件在原系统中的绝对路径RESOURCEPRE="/home/hsinghsu/new"##生成导出文件txtEXPORTTXT="/home/hsinghsu/export.txt"##RESOURCEPRE值的长度resourceLength=${#RESOURCEPRE}##echo $resourceLength#获得随机数返回值,用于生成新的文件名function random() {       ## +%s获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数,+%N 获得当前时间的纳秒数据,精确到亿分之一秒    num=$(date +%s%N);     echo $num; } ##在txt中打印标头echo -e "原文件名\t新文件名\t原文件路径\t新文件路径">>$EXPORTTXT##解析文件拷贝文件函数function COPYFILES(){  ##获取原文件及目录列表  filelist=`ls -l $RESOURCEPATH`  ##循环遍历文件  for filename in $filelist;do    ##判断是否是文件    if [ -f $filename ] ; then      ##echo "this is a file,file name is $filename , file:`pwd`/$filename"            ##文件在linux系统中存放的全路径      tfilepath=`pwd`/$filename         ##获取子字符串,获取目录的结构,以/开始      tmpFilePath=${tfilepath:resourceLength}      ##原始文件在原系统中的目录结构      oldFilePath=$RESOURCEFLAG$tmpFilePath            tfile=$filename;      ##拷贝后的文件名,不含后缀,不含/      oldFileName=${tfile%.*}      ##拷贝后的文件后缀,不含.      oldFileNameExt=${tfile##*.}      ##echo "oldFileName:$oldFileName"      ##echo "oldFileNameExt:$oldFileNameExt"      ##新文件名,通过随机数生成19位的数字      newFileName=$(random)       ##echo "newFileName:$newFileName"            ##将生成的文件名称写入导出日志文件中,打印的内容:原文件名\t新文件名\t原文件路径\t新文件路径      echo -e "$filename\t$newFileName.$oldFileNameExt\t$oldFilePath\t$TOPATH/$newFileName.$oldFileNameExt">>$EXPORTTXT      ##将原文件复制在制定的目录下      cp $RESOURCEPATH/$filename $TOPATH/$newFileName.$oldFileNameExt    ##判断是否是目录    elif [ -d $filename ] ; then      ##echo "this is a dict,dict name is $filename ,dict:`pwd`/$filename"      cd $filename       RESOURCEPATH=`pwd`      ##对目录递归执行COPYFILES      COPYFILES      RESOURCEPATH=`dirname $RESOURCEPATH`      cd $RESOURCEPATH    ##else      ##echo "$RESOURCEPATH/$filename is not a common file.Please check."    fi  done}cd $RESOURCEPATHCOPYFILESecho "ALL DONE"

执行后最后会生成日志文件,文件内容显示:原文件名\t新文件名\t原文件路径\t新文件路径 

0 0