练手脚本 复制文件到同名目录中
不断地思考,不断地想偷懒。
运行环境: 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
写了个新版,不过有些东西还是重复了,要重新调整一下。