我有以下“系统命令”来移动文件。使用File::Move
命令或使用下面的命令是否合适?如果File::Move
更好,我该如何使用它?
system("mv $LOGPATH/test/work/LOGFILE $LOGPATH/test/done/$LOGFILE") == 0
or WriteLog(ERROR, "mv command Failed $LOGPATH/test/work/$LOGFILE status was $?");
答案 0 :(得分:15)
您要查找的功能位于File :: Copy:
use File::Copy 'move';
move $x, $y or WriteLog ("move $x, $y failed: $!");
File :: Copy是Perl自身标准发行版的一部分。
您当然可以使用system ("mv ...")
命令执行相同的操作。 File :: Copy的优点是:
/Library/Application Support/Hi I'm On A Mac/
; system
的成本淹没了其他一切。 File::Copy::move
和rename
的费用大致相同,因此您也可以使用更安全的move
,它可以在文件系统中运行。答案 1 :(得分:8)
如果你要移动文件,还有一件事要添加到混音中 相同的设备(即,不需要仅移动文件内容 更新其目录条目),您可以简单地使用内置函数 rename:
重命名OLDNAME,NEWNAME
更改文件名称;现有文件NEWNAME将是 重挫。成功时返回true,否则返回false。
此功能的行为因您而异 系统实施。例如,它通常不起作用 跨文件系统边界,即使系统mv 命令有时会补偿这一点。其他限制 包括它是否适用于目录,打开文件或预先 现有文件。检查perlport和重命名(2) 有关详细信息,请参见联机帮助页或等效系统文档。
对于独立于平台的“移动”功能,请查看 File::Copy模块。
答案 2 :(得分:3)
要添加Kinopiko的优秀答案,使用File :: Copy而不是系统mv
命令的两个主要原因之一 - 除了不总是相关但仍然有意义的可移植性问题之外,他指出 - 事实上,调用系统命令会分叉至少一个子进程(如果你做任何重定向,其中两个 - mv
和shell)。与File :: Copy相比,这会浪费大量系统资源。