Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134421
  • 博文数量: 51
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-21 12:33
文章分类

全部博文(51)

文章存档

2011年(1)

2010年(5)

2009年(1)

2008年(12)

2007年(32)

我的朋友

分类:

2007-08-09 20:18:19

  touch主要被用来改变文件的时间戳。在这里与大家共享我写的一个脚本。来实现touch当前目录以及当前目录下的所有文件。
 
  主要思想是将当前目录入队。每次处理都从队列取队头元素, 如果队列不空,处理该目录下的所有文件,当再读到一个目录时,将其入队。这样处理直到队列空为止。
 
 

#!/usr/bin/perl

##############################################################
# Touch all files in current directory and its subdirectory. #

# Author: Gavin Xu # #

##############################################################


#Queue length

$qlength = 0;
#The index of first element

$index = 0;
#stores all the elements

@queuelist=();

#insert an element into queue.

sub enque
{
    $queuelist[$index+$qlength] = $_[0];
    $qlength ++;
}

#delete the first element in the queue.

sub delque
{
    $tempvar = $queuelist[$index];
    $qlength --;
    $index ++;
    return ($tempvar);
}

#Get current directory

$dir = $ENV{'PWD'};
#insert the current directory in the queue.

enque($dir);

#width-first search the current directory.


while ( $qlength > 0 )
{
    $dir = &delque;
    if ( $dir ne "")
    {
        opendir(BIN, $dir) or die "Can't open $dir: $!";
        while( defined ($file = readdir BIN) )
        {
            # if $file is directory

            if ( -d "$dir/$file" )
            {
                next if $file =~ /^\.\.?$/;
                #insert complete path into queue.

                $tmpvar = $dir."\/".$file;
                enque($tmpvar);
            }
            else
            {
                #touch the file

                `touch $dir/$file`
            }
        }
    }
    closedir(BIN);
}

阅读(2033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~