1,移动目录
chdir "/etc" or die "cannot chdir to /etc: $!";
如果不加路径参数,是将工作目录设置成主目录。
2,文件名模式匹配(glob)
取得目录下的文件,不包含以点号开头的字母,2个效果一样,写法不通,一般用第二种:
my @all_files = glob "*";
my @all_files = <*>;
取得目录下的以*.pm结尾的文件:
my @pm_files = glob "*.pm";
例子:
my $dir = "/home/aaa/aaa";
my @dir_files = <$dir/* $dir/.*>;
foreach my $file (@dir_files) {
print "$file\n";
}
取得目录下的所有文件。
3,目录句柄操作
例子:
my $dir = "/home/aaa/aaa";
opendir DH, $dir or die "Cannot open $dir: $!";
foreach my $file (readdir DH) {
next unless $file =~ /\.pm$/; # 只想取得扩展名为pm的文件
next if $file eq "." or $file eq ".."; # 排除点号(当前目录)和双点号(上层目录)2个目录
next if $file =~ /^\./; # 只想取得所有不以点号开头的文件
print "$file\n";
}
closedir DH;
3,删除文件
例子:
unlink "slate", "bedrock", "lava";
unlink的返回值代表成功删除多少个文件
foreach my $file (qw(slate bedrock lava)) {
unlink $file or warn "failed on $file: $!\n";
}
4,重命名文件
例子:
my $dir = "/home/aaa/aaa";
opendir DH, $dir or die "Cannot open $dir: $!";
foreach my $file ( readdir DH ) {
my $count;
next unless $file =~ /\.old$/;
my $newfile = $file;
$newfile =~ s/\.old$/.new/;
if ( -e $newfile ) {
warn "can't rename $file to $newfile: $newfile exists\n";
}
elsif ( rename $file, $newfile ) {
$count++;
}
else {
warn "rename $file to $newfile failed: $!\n";
}
print "$count";
}
将结尾是.old的文件改成以.new结尾的文件,为降低覆盖文件的几率,加入了判断新文件是否存在的检测。
5,链接于文件
例子:
硬链接,
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
link "pm.old", "pm.new"
or warn "can't link: $!";
软链接:
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
symlink "pm.old", "pm.back"
or warn "can't link: $!";
删除链接文件:
my $dir = "/home/aaa/aaa";
chdir "$dir" or die "cannot chdir to /etc: $!";
unlink "pm.new", "pm.back"
or warn "can't unlink: $!";
软连接和硬链接的区别就不废话了,linux下已经很熟悉了。
6,建立和删除目录
例子:
my $dir = "/home/aaa/aaa";
my $temp_dir = 'test';
chdir "$dir" or die "cannot chdir to /etc: $!";
mkdir $temp_dir, 0700 or die "cannot create $temp_dir: $!";
unlink <$temp_dir/* $temp_dir/.*>;
rmdir $temp_dir;
7,修改权限和更改隶属关系
例子:
my $dir = "/home/aaa/aaa";
opendir DH, $dir or die "Cannot open $dir_to_process: $!";
foreach my $file ( readdir DH ) {
next unless $file =~ /\.old$/;
chmod 0775, "$file";
defined(my $user = getpwnam "sysadmin") or die "bad user";
defined(my $group = getgrnam "sysadmin") or die "bad group";
chown $user, $group, $file;
}
用getpwnam函数将名称转换为数值,这里我们用到了defined函数来确认返回值是不是undef,如果所指定的用户和组不存在,就会返回undef。
阅读(1577) | 评论(3) | 转发(1) |