下面是shell调用perl产生6位随机串的语句:
perl -e "@a=('a'..'z','0'..'9','A'..'Z')print \$a[int(rand()*\$#a)] for (1..6)"
在shell的提示符下粘贴上面的语句,回车就可以产生一个随机串。
如果你认为这是shell语句,那么恭喜你,你的程序很快就写好了,其余建立目录、移动文件、检查文件是否存在等语句我相信你会。
如果你和我一样,认为这不是shell语句,实际上是perl程序,那么我非常抱歉,或许本人对shell的认识不够,帮不了你,你继续等待高人,祝你好运。
补充:
我写的程序如下:
#以下三行获取当前的年月日
y=`date +%Y`
m=`date +%m`
d=`date +%d`
#下面定义文件的源和目标文件夹
src="/file/temp"
dst="/file/$y/$m/$d"
#下面是两个临时文件,只在运行的时候才需要,第一个文件存在表示正在运行
run_flag="/file/log/running"
tmp_file="/file/log/tmp"
#调试一:你使用时删除下面三行
src="$HOME/ygb"
run_flag="$HOME/ygb/running"
tmp_file="$HOME/ygb/tmp"
#首先检查文件是否正在运行,否则退出,或者设置标志
test -f $run_flag &&exit
cat /dev/null >$run_flag
echo "start processing ..."
#定义函数移动单个文件
mv_file(){
perl <<! >$tmp_file
\$a="$1"
\$n=rindex(\$a,".")
print substr(\$a,\$n) if (\$n>0)
!
ext=`cat $tmp_file`
while true
do
perl <<! >$tmp_file
@a=('a'..'z','0'..'9')
print \$a[int(rand()*\$#a)] for (1..6)
!
dst_f=$dst/`cat $tmp_file`$ext
test -f $dst_f || break
done
#调试二:你使用时候删除下面语句的echo和两个引号
echo "mv $1 $dst_f"
}
#移动所有文件
for f in $src/*
do
mv_file $f
done
#运行结束以后清除标志
rm $run_flag
echo "done."
程序在SCO UNIX上调试通过,没有使用任何特殊内容,在LINUX上应该没有问题。程序的两段核心代码都调用perl完成,一是获取文件扩展名,二是产生随机文件名直到不重复为止。
将你的备份语句写成可以自行的脚本,如orable_bak.sh使用 crontab 指令定时执行,相当于 windows 的定时任务:
>crontab -l
输入:
* 23 * * * 你的脚本完整路径
补充:
第一道第五个字段的整数取值范围及意义是:
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
调试的时候,比如现在16点,你可以
10 16 * * * 脚本完整路径名称
测试16点10分是否有效正常执行
crontab -e 编辑该任务
crontab -r 删除该任务
注意:以上 *** 作都是默认有对应权限的情况下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)