Perl复制、移动、重命名文件/目录
File::Copy复制文件
File::Copy模块提供了copy函数和cp函数来复制文件,它们参数上完全一致,但行为上稍有区别。
用法大致如下:
use File::Copy qw(copy cp);
copy("sourcefile","destinationfile") or die "Copy failed: $!";
copy("Copy.pm",\*STDOUT);
- 两个参数都可以是文件或文件句柄或者文件句柄通配,第一个参数指定源,第二个参数指定目标
- 如果第一个参数是文件句柄,那么将直接从文件句柄来读取数据,如果这个参数是文件,那么将打开这个文件来读取数据
- 第二个参数是数据的写入目标
- 如果目标文件不存在,但父目录存在,则创建该目标文件,但如果父目录也不存在,则报错
- 如果目标文件存在,则覆盖该目标文件,不会给出任何提示
- 如果目标是一个已存在的目录,且源不是一个文件句柄,则拷贝到目标目录中,如果源是一个文件句柄,将报错
- 源和目标不能是同一文件
- 因为是拷贝操作,所以可以跨文件系统拷贝
- 第三个可选参数用于设置拷贝时的缓冲大小。对于文件来说,一般缓冲大小是整个文件(但最大2MB),对于不关联实体文件的文件句柄(如套接字文件句柄),默认为1K大小
- cp可以替换copy。它们的参数模式完全一致,但cp会保留源文件的属性,而copy则是采用目标文件的默认属性。此外,cp在遇到权限错误的时候返回0,而不管文件是否成功拷贝
- 强烈建议:如果可以,都使用文件名而不是文件句柄。如果要使用文件句柄,则采用binmode模式的文件句柄,以免丢失某些数据
- File::Copy模块无法操作目录,所以copy无法复制目录
例如,现在/mnt/g下创建一个文件t1.py。然后执行如下内容的perl程序:它将拷贝root下的t.py,然后再拷贝覆盖到已存在的t1.py。
use File::Copy qw(copy cp);
copy "/root/t.py","/mnt/g/" or die "Can't copy file1: $!";
cp qw(/mnt/g/t.py /mnt/g/t1.py) or die "Can't copy file2: $!";
重命名/移动文件
rename函数可以重命名文件,也可以移动文件到其它目录。功能类似于unix下的mv命令。
rename old_name,new_name;
rename old_name => new_name; # 列表环境下,逗号可用胖箭头替换
但需要注意,rename函数无法跨文件系统移动文件,因为它的底层仅仅只是重命名,修改文件inode中的数据。跨文件系统移动文件,实际上是复制文件再删除源文件,它会导致inode号码改变,rename的本质是基于inode的,无法实现这样的功能。
rename "test2.log","test222.log"
or die "Can't rename file1: $!";
rename "test222.log","/tmp/test223.log"
or die "Can't rename file2: $!";
rename "/tmp/test223.log","/boot/test223.log" # 本行将报错
or die "Can't rename file3: $!";
File::Copy模块提供了move函数,它可以跨文件系统移动文件。用法大致如下:
use File::Copy qw(move mv);
move("/dev1/sourcefile","/dev2/destinationfile");
mv("/dev1/sourcefile","/dev2/destinationfile");
mv("/dev1/sourcefile" => "/dev2/destinationfile");
- File::Copy模块无法操作目录,所以move无法重命名或移动目录
- move有两个参数,第一个是源,第二个是目标
- 如果目标是个已存在的目录,而源是个非目录,则源将被移动到目标目录内
- 如果可以,move在文件系统底层只是简单地重命名文件。否则(例如跨文件系统),将copy源文件到目标,然后删除源文件。如果这个copy+delete的过程中失败,则在目标路径下会遗留一个可能还未拷贝完成的副本
- move可以使用mv替代
其实,可以采用shell交互的方式来取巧重命名:
rename(old,new) or system("mv",old,new);
递归复制/移动File::Copy::Recursive
具体内容暂缺,可看官方手册:File::Copy::Recursive
Perl复制、移动、重命名文件/目录的更多相关文章
- Python批量复制和重命名文件
Python批量复制和重命名文件 示例代码 #! /usr/bin/env python # coding=utf-8 import os import shutil import time impo ...
- 【转】Linux 移动或重命名文件/目录-mv 的10个实用例子
熟悉了 复制命令,下一个相关的命令就是 mv 命令.当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么mv 命令是完成这个任务的首选. 初识 mv 命令 mv 命令是一个与cp类似的命令,但 ...
- Linux 移动或重命名文件/目录-mv 的10个实用例子
本文导航 -初识 mv 命令03% -1.移动文件08% -2.移动多个文件15% -3.移动目录23% -4.重命名文件或目录27% -5. 重命名目录35% -6. 打印移动信息39% -7. 使 ...
- 【ANT】创建删除目录,复制移动重命名文件
一.创建目录: <?xml version="1.0"?> <project default="test_mkdir"> <tar ...
- Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹
(13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
ASP FSO操作文件(复制文件.重命名文件.删除文件.替换字符串)FSO的意思是FileSystemObject,即文件系统对象.FSO对象模型包含在Scripting 类型库 (Scrrun.Dl ...
- VC 复制移动删除重命名文件文件
说明: 1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile 2.每个函数都先拷贝了原来的路径,保证了路径是以2个\0\0结尾.(如果不以2个\ ...
- php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种:
php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种: 方法一:使用copy函数 格式:copy(source,destination) 将文件从 source ...
- Web 在线文件管理器学习笔记与总结(7)重命名文件
rename($oldname,$newname) 重命名文件或目录 <<<EOF EOF; 使用heredoc 技术,来部分实现界面与代码的准分离 重命名时,需要验证新文件名的合法 ...
随机推荐
- php签名认证
一.概述 开年第一篇,该篇主要讲述了接口开发中,如何安全认证.如何用php签名认证. 二.说说历史 签名认证是什么?为什么要做签名认证?签名认证哪里会用到?no.no.no.....是不是,是不是,一 ...
- GitHub和Git(待补充)
仓库(Repository):存放项目代码,每个项目对应一个仓库. 收藏(Star) 复制(Fork):克隆并生成新的仓库,from某某.以此为基础修改或应用项目.pull request,源仓库会查 ...
- noip第31课资料
- Linux更新源汇总-18.9.7更新
企业站 阿里云:https://opsx.alibaba.com/mirror 网易:http://mirrors.163.com/ 教育站 北京理工大学:http://mirror.bit.edu. ...
- build.gradle
1.将Eclipse项目导入到Android studio 中 很多点9图出现问题解决方法: 在build.gradle里添加以下两句: aaptOptions.cruncherEnabled = f ...
- 瞎搞poj1013
http://poj.org/problem?id=1013 题意:给你标记从A到L的石子,其中有一个石子,可能会轻于其它石子,也可能重于其它石子.你只能通过三次天平的测量去找到这个石子.天平的三个状 ...
- Java并发编程:Lock(锁)
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被syn ...
- Openvswitch手册(7): Interfaces
我们来看Interfaces ofport: OpenFlow port number for this interface. type: system: An ordinary network de ...
- 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽
一.软件与硬件平台 软件平台: 操作系统:Windows 7 64-bit 开发套件:ISE14.7 硬件平台: FPGA型号:XC6SLX45-CSG324 QSPI Flash型号:W25Q128 ...
- map put值 使用匿名函数
List<Map<String, Object>> list = setRoleMenuRlMapper.selectMapByParams(params); // Map m ...