红联Linux门户
Linux帮助

有达人会写脚本吗?可以帮我写个简单的脚本不?

发布时间:2008-10-22 17:13:00来源:红联作者:kofeewoo
我们公司经常会同步过来很多文件,希望能按上传日期移动到相应的文件夹。
可以针对这样写个脚本吗?
万分感谢了!
文章评论

共有 9 条评论

  1. malalaku 于 2008-10-24 14:45:45发表:

    刚开始学习,,,很深奥,,不过还是觉得小河很厚道,,赞一个,符合Linux的开源精神!!

  2. hejie_1207 于 2008-10-24 14:02:21发表:

    呵呵,多谢夸奖!我不懂的也很多,大家互相学习吧。:0wmjh(1

  3. wufaqian 于 2008-10-24 13:53:21发表:

    小河 真是好同志啊 讲的很好~~~热心人 代表楼主谢谢你

  4. hejie_1207 于 2008-10-24 12:55:58发表:

    引用:
    原帖由 sydnash 于 2008-10-24 11:46 发表
    date=$( ls -l $file | tail -1 | awk '{print $6}' )
    刚学shell脚本 这句不是很明白
    能讲解下不 谢谢



    这条语句运用了“命令替换”。对 Bash(Linux 的默认 Shell)而言,所谓命令替换,就是指系统(即 Shell)首先执行 $() 符号里面的命令,并使用该命令的执行结果替换该命令。在本例中,就是用命令 ls -l $file | tail -1 | awk '{print $6}' 的执行结果来替换该命令,最终把该命令的执行结果赋给 date 变量。

    至于 $() 符号内的命令本身,由于 ls 和 tail 是常用命令,所以我只讲一下 awk。在此处,awk '{print $6}' 的作用是把一组字符串中的第 6 个词截取出来。
    再看一个例子:

    $echo This is a test
    This is a test
    $echo This is a test | awk '{print $4}'
    test

    我想讲到这里,大家应该就明白了吧。最后,假设在当前目录下只有一个文件 Filemove,我在下面给出该命令的分解执行情况:

    $ls -l Filemove
    -rwxrw-r-- 1 He He 281 2008-10-22 21:58 Filemove
    $ls -l Filemove | tail -1
    -rwxrw-r-- 1 He He 281 2008-10-22 21:58 Filemove
    $ls -l Filemove | tail -1 | awk '{print $6}'
    2008-10-22
    $date=$( ls -l Filemove | tail -1 | awk '{print $6}' )
    $echo $date
    2008-10-22

    值得注意的是,不同的系统上面 ls -l 命令的输出格式并不一定和我这里列举的一样,所以在使用该脚本前,须先检查一下你的系统的 ls -l 命令的输出格式,如果必要的话请对该语句进行相应的修改。另外,我刚刚发现该语句中的 | tail -1 似乎是多余的,可以将其去掉。

    [ 本帖最后由 hejie_1207 于 2008-10-24 13:04 编辑 ]

  5. sydnash 于 2008-10-24 11:46:15发表:

    date=$( ls -l $file | tail -1 | awk '{print $6}' )
    刚学shell脚本 这句不是很明白
    能讲解下不 谢谢

  6. kofeewoo 于 2008-10-24 11:34:04发表:

    谢谢各位了
    不是我不有偿,我实在是新手,也没有分值给你们呀,不好意思呀!

  7. 奶茶dsk 于 2008-10-23 10:39:57发表:

    支持楼上。

  8. hejie_1207 于 2008-10-22 21:41:04发表:

    #!/bin/bash

    ORIGDIR="/var/UploadFiles"
    TARGDIR="/var/ClassifiedFiles"

    filelist=$( ls $ORIGDIR/* )

    for file in $filelist
    do

    date=$( ls -l $file | tail -1 | awk '{print $6}' )
    if [ ! -e $TARGDIR/$date ]
    then
    mkdir $TARGDIR/$date
    fi

    mv $file $TARGDIR/$date

    done


    使用说明:

    1. 变量 ORIGDIR 是上传目录,所有上传的文件都必须放在这个目录下,且该目录不能有子目录。变量 TARGDIR 是分类目录所在的目录,所有分类好的目录和文件都是该目录的子目录。

    2. 每一个文件都按其修改日期(如果此文件在上传后未被修改的话,也应该就是其上传日期)放在以其修改日期命名的目录下。例如:位于 $ORIGDIR 目录下修改日期为 2008-09-26 日的文件就被放在 $TARGDIR/2008-09-26 目录下。

    附:由于你对脚本的功能不是描述的很详细,所以我只是给你提供了一个简单的框架。如果要实现更复杂的功能,你自己在这个基础上修改。

    [ 本帖最后由 hejie_1207 于 2008-10-22 21:50 编辑 ]

  9. xtvnet 于 2008-10-22 18:23:30发表:

    要是有尝可能会有人吧,呵呵