셸 파일 복사

2555 단어
다음 과 같은 응용 장면 이 있 습 니 다. 현재 네트워크 시스템 의 파일 저장 소 는 windows 에서 디 렉 터 리 구조 에 따라 실제 파일 이름 으로 저장 되 어 있 습 니 다. 이 시스템 의 파일 을 Liux 시스템 으로 옮 겨 야 하고 파일 은 하나의 디 렉 터 리 에 저장 되 어 있 습 니 다. 이 디 렉 터 리 는 하위 디 렉 터 리 를 포함 하지 않 습 니 다. 현재 해결 방안 은 셸 스 크 립 트 를 사용 하여 간단하게 처리 하 는 것 입 니 다.
##原文件目录,需要解析的文件目录
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 새 파일 경로 

좋은 웹페이지 즐겨찾기