- 论坛徽章:
- 0
|
关于这个shell的问题在于文件非常多,这么说吧如果我直接在目录下执行mv *.xxxx ../ 会提示arguments too long。所以在shell里写ls *是不行的。
文件类型有好几种,同一天的文件都非常巨大,举个例子说吧,假设文件名为aaaa20091201_1010000_0000.unl.Load.err,我在shell的条件里写ls aaaa200912*.unl.Load.err,执行后都会返回arguments too long,即我需要将ls 后面的条件精确到aaaa2009120*........这样,如果只有一种文件名,那么一个月的文件我只要执行三次shell就可以搞定,只要将ls的条件改成aaaa2009120*....,aaaa2009121*....,aaaa2009122*.....,剩下的30号或31等最后一切再*改下都可以。
问题就在光文件名就10几种,一共有4个月,而且周末又弄过来了70多万,也就是说现在需要修改的文件总数量达到98万了,那么ls的条件只能更精确才能将shell执行下去,这样的工作量太巨大了。所以恳请大侠提供一个shell,条件就是自动搜索当前或指定工作目录下的后缀有unl.Load.err的文件,找到后就删除.Load.err,然后将文件mv到指定的目录去,mv这一步也是要做的,如果不在shell中完成也是个大问题。
下面就是我弄的shell,数据量小的时候用用还行。
src_dir=/export/system/bak200912/bak_err #要修改的文件所在的目录,要根据实际修改此处
dest_dir=/export/system/ #如果有必要可以加上目的目录
cd $src_dir
echo "begin at `date \"+%Y/%m/%d %H:%M:%S\"`." > $src_dir/mv.log
ls caaa2009120*_10100*.unl.Load.err|awk -F'.Load.err' '{print "mv "$0" "$1".unl"}'
>$src_dir/mv.sh
chmod +x mv.sh
cat mv.sh>>$src_dir/mv.log
mv.sh>>$src_dir/mv.log
echo "end at `date \"+%Y/%m/%d %H:%M:%S\"`." >> $src_dir/mv.log |
|