练手脚本 复制文件到同名目录中

danny posted @ 2012年5月22日 02:41 in linux with tags shell linux , 1831 阅读

不断地思考,不断地想偷懒。

运行环境: cygwin

从目录4.25复制到目录e,如果文件存在/目录不存在,则不复制,并记录

 

.
|-- 4.25
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| `-- 3
| |-- 1.jpg
| |-- 2.jpg
| |-- 3.jpg
| |-- 4.jpg
| `-- 5.jpg
`-- e
|-- 1
| |-- 1.jpg
| `-- 2.jpg
|-- 2
`-- 4

脚本运行结果(运行环境是cygwin)

  • 脚本输出方面
  • 文件、目录变化

=========脚本输出=========  

$ ./calc.sh 4.25;tree
当前目录 /home/pocoyo/4.25 正在处理

"/home/pocoyo/4.25/1/3.jpg" -> "/home/pocoyo/e/1/3.jpg"
"/home/pocoyo/4.25/1/4.jpg" -> "/home/pocoyo/e/1/4.jpg"
"/home/pocoyo/4.25/1/5.jpg" -> "/home/pocoyo/e/1/5.jpg"
"/home/pocoyo/4.25/2/1.jpg" -> "/home/pocoyo/e/2/1.jpg"
"/home/pocoyo/4.25/2/2.jpg" -> "/home/pocoyo/e/2/2.jpg"
"/home/pocoyo/4.25/2/3.jpg" -> "/home/pocoyo/e/2/3.jpg"
"/home/pocoyo/4.25/2/4.jpg" -> "/home/pocoyo/e/2/4.jpg"
"/home/pocoyo/4.25/2/5.jpg" -> "/home/pocoyo/e/2/5.jpg"

文件数统计
目录 文件数
1 5
2 5
3 5
总计: 3 15

未复制文件
目录 e:\3 不存在
文件 e:\1\1.jpg 已经存在
文件 e:\1\2.jpg 已经存在

===============以下是文件、目录变化===============

.
|-- 4.25
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 3
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- conflicts.txt
| `-- total.txt
|-- calc.sh
|-- e
| |-- 1
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| |-- 2
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| | |-- 4.jpg
| | `-- 5.jpg
| `-- 4
|-- freeime6.5.exe
|-- rename.sh
|-- rename_new.sh
`-- scan_record.txt
#!/bin/bash
# by Daniel Chow @speedup2010
# v1 2012年05月21日 星期一 22:58:31
#_source=/cygdrive/d/$1
#_des=/cygdrive/e/
_source=~/$1/
_des=~/e/
_log=$_source
if [ $# -eq 1 -a -d $_source ];then {
        cd $_source
        echo -e "当前目录 $PWD  正在处理\n"
        for files in */*;do
                _dir=${files%%/*}
                if [ -f $_des$files ];then
                        echo "文件 $_des$files 已经存在">>$_log/conflicts.txt
                elif [ ! -d $_des$_dir ];then
                        echo -e "目录 $_des$_dir 不存在" >>$_log/conflicts.txt
                elif [  -d $_des$_dir ];then
                        cp $_source$files  $_des$_dir -iv
                fi

                echo -en "\t$_dir \t`ls -l $_dir | grep "^-" | wc -l`\n" >>$_log/total.txt;
        done
        sum_dir=$(sort $_log/total.txt | uniq | wc -l)
        echo  -e "\t目录\t文件数">$_log/tmp.txt
        sort $_log/total.txt | uniq >>$_log/tmp.txt
        mv $_log/{tmp,total}.txt
        echo -e "总计:\t$sum_dir\t$(awk '{sum_files+=$2};END{print sum_files}' $_log/total.txt)">>$_log/total.txt
        echo -e "\n\t文件数统计\t\t \n`cat $_log/total.txt`\n"
        sort $_log/conflicts.txt | uniq >>$_log/tmp.txt
        mv $_log/{tmp,conflicts}.txt
        sed "s|$HOME/||g" -i conflicts.txt
        sed 's/\//:\\/;s/\//\\/' -i conflicts.txt
        echo -e "\t未复制文件\t\t \n`cat $_log/conflicts.txt`\n"

}
else
        echo -e "用法: $0 待复制目录\n"
fi

写了个新版,不过有些东西还是重复了,要重新调整一下。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter