有一个 Perl 实用程序
rename
(perldoc -f rename
),如果我理解正确的话,它是 rename
系统调用的包装器 (man rename
-> 系统调用手册:RENAME(2)),它有很多版本:https://unix.stackexchange.com/q/730894
同时,上面已经提到过的其手册页
perldoc -f rename
隐式建议(如果我理解正确的话)使用 File::Copy
来重命名文件。
我的理解正确吗?也就是说,最好使用
File::Copy
而不是 rename
是否正确? (因为:a)根据perldoc -f rename
,它更强大,b)不同版本不会造成混乱。)
如果这是真的,那么为什么Perl Cookbook,在重命名文件部分,没有提到
File::Copy
,而只提到rename
?编辑:我在问题的第二部分实际上的意思是:“既然我们已经有了 File::Copy
,那么拥有 rename
有什么意义呢?”
是的,
File::Copy
模块比rename
命令更通用、更可靠。
教科书谈论
rename
命令,因为它实际上是语言的一部分,如果您有 perl
二进制文件,则可以访问 rename
命令。该模块是一个额外的模块,非常流行且众所周知,但仍然是一个额外的模块。要使用它,您必须先use
它。尽管它是默认安装的,但要在脚本中使用,您必须添加 use File::Copy;
行。
rename
确实有问题,它们已在文档中列出。但只要看看那个清单就知道了。您多久需要将文件从一个 FS 移动到另一个 FS?您多久需要重命名打开的文件?
在实践中,虽然我确实了解
File::Copy
,但我从未真正需要它。我在现实生活中与该模块的所有交互都是对其他人代码的维护。当然,我通常对文件重命名的需求并不超出轮换日志/备份的范围。或者创建临时文件,删除原始数据文件,将临时文件重命名为原始文件。任何更奇特的事情通常都是一次性任务,并不能证明编写脚本是合理的。
因此,如果您的重命名需求对于
rename
命令来说足够简单 - 那就去做吧。如果您怀疑 rename
在您的环境中会失败 - 请使用 File::Copy
。