David.Z的个人空间 https://blog.eetop.cn/zengwen [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

perl目录和文件操作

已有 382 次阅读| 2023-4-26 19:25 |个人分类:日常记录|系统分类:芯片设计

#1

chdir  /home/...

切换执行目录


#2

文件名通配,启动目录下有多个文件需要查找指定文件列表

my @all_files = glob '*.pm';       ####查找以 .pm 结尾的文件列表;默认不匹配 . 开头的文件


#3

my $dir='/etc';
my @dir_files=<$dir/*  $dir/.*>;    ####匹配所有文件包括以  .  开头的文件

注:::带   '/'  为文件通配操作,不带  '/'   为文件句柄操作    如 :::

my @file=<file1>     #####读取文件  file1  的内容;


#4

使用目录句柄从目录中取得文件名列表,获取的列表为该目录下所有文件,包括  .  和  ..  文件,需要自己额外处理

my $dir_to_process ='/etc';
opendir my $files_name, $dir_to_process or die  "cannot open $dir_to_process :$!";
foreach $file (readdir $files_name){print $file;
}
closedir $files_name;

#额外的处理,只处理  .pm  结尾的文件

while($file=readdir $files_name){
 next unless $name=~/\.pm$/;
}

#排除掉 .  和 .. 文件

while($file=readdir $files_name){
 next if $file eq '.' or $file eq '..';
}

###拼合文件路径和文件名,对文件的处理需要具体的文件路径和文件名,查找到的文件名没有路径,后续处理未加上路径会在当前路径中查找文件名

处理前需要 

$file="$dir_to_process/$file";

或者使用File相关的模块

use File::Spec::Functions;
$file=catfile($dir_to_process,$file);

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


#5删除文件  unlink  @file_list             ###返回值为删除的文件数目,无法知道哪些被删除,哪些没有被删除

unlink 'state','bedrock','lava';
unlink qw(state bedrock lava);

##使用通配符删除指定类型文件  glob

unlink glob  '*.pm';

##一个个的删除,删除成功返回1,失败返回0

foreach my $file (qw/file1  file2  file3/){
unlink $file or warn "failed on $file :$! \n";
}


#6重命名文件

rename 'oldfile' , 'new file';

文件迁移

rename 'home/dir1/file1' , 'file1';
rename 'home/dir1/file1' => 'file1';

批量rename做法::将.old结尾的文件替换为.new  ####

foreach my $file (glob '*.old'){
my $new_file=file;
$new_file=s/\.old$/.new/;
if(-e $new_file){
warn "The $file to $new_file failed :: exists\n";
}elsif(rename $file => $new_file){
next;
}else{
warn "rename $file to $new_file failed :$!\n";
}
}


#7创建和删除目录mkdir dirname   permission

my $dir_name='dir';
mkdir $dir_name ,0755 or warn "cannot make $dir_name :$!\n";

#从命令行读取permission参数

my ($name ,$perm)=@ARGV;
mkdir $name ,oct($perm) or die "cannot create $name :$!";

#移除空目录   rmdir

foreach $dir (qw/dir1  dir2  dir3  dir4/){
rmdir $dir or warn "cannot rmdir $dir :$!\n";
}

#移除非空目录::先删除目录内容

foreach $file (glob '$dir/*  $dir/.*'){
 unlink $file or warn "cannot unlink $file :$!\n";
}
rmdir $dir or warn "cannot rmdir $dir :$!\n";


#8修改文件或目录权限::返回修改成功的条目数量

chmod 0755 , 'file1','file2';


#8 修改隶属关系

define(my $user =getpwnam 'username') or die "bad user name\n";
define(my $group= getgrnam 'groupname') or die "bad group name\n";
chown $user ,$group ,@files_list;


#9对文件内容相关操作

如何在Perl中更改,删除或在文件中插入一行,或追加到文件的开头? | 码农家园 (codenong.com)


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 25

    粉丝
  • 7

    好友
  • 45

    获赞
  • 1000

    评论
  • 173

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-13 16:52 , Processed in 0.024134 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部