shell 文件拷贝

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

##原文件目录,需要解析的文件目录
RESOURCEPATH="/home/hsinghsu/new"

##将原文件拷贝到的目录,将文件统一拷贝到该目录
TOPATH="/home/hsinghsu/to"

##原系统文件上传的路径,用于拼接原文件在原系统中的绝对路径
RESOURCEFLAG="D://upload"

##原文件在linux系统的前缀,用于拼接原文件在原系统中的绝对路径
RESOURCEPRE="/home/hsinghsu/new"

##生成导出文件txt
EXPORTTXT="/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 $RESOURCEPATH
COPYFILES
echo "ALL DONE"

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值