File :: Copy 모듈을 사용하여 Perl에서 파일을 복사합니다.Perl로 파일을 복사하고 타임 스탬프를 유지하려면 어떻게해야합니까?
#! /usr/bin/perl -w
use File::Copy;
copy("somefile.log", "copiedfile.log");
타임 스탬프 (특히 수정 시간)를 보존하고 싶지만 옵션이 아닌 것으로 보입니다.
"cp -p"에 대한 시스템 호출을하지 않고도이를 수행 할 수있는 간단한 방법이 있습니까?
타임 스탬프를 저장하고 (stat 사용) 복사본을 만들고 타임 스탬프를 다시 적용합니다 (utime 사용). (touch 명령과 동일) –
제임스, 브라이언의 대답은 다음과 같습니다. "광대 한 Perl 라이브러리에"복사 및 보존 특성 "기능 (Linux에서 작동 함)이없는 경우 놀랍습니다." "Linux에서의 작업"을 의미합니까? cp -p에 대해 이야기하고 있다면, 리눅스의 소스 코드는 위에서 제시 한 것과 똑같습니다. stat와 utime을 사용하여 "보존"을하십시오. 여기에 : (* (x-> xstat)) (src_path, & src_sb) ... \t utb.actime = src_sb.st_atime; \t utb.modtime = src_sb.st_mtime; \t utime (dst_path, & utb) –
Murali, Perl은 rmscopy (아래의 ghostdog74 답변 참조)라는 깨끗한 "사본 및 보존 속성"명령을 가지고 있지만 VMS 시스템에서만 사용할 수 있습니다. Windows에서는 파일을 복사하는 표준 의미 체계가 타임 스탬프를 보존한다고 생각하기 때문에 syscopy가 작업을 수행 할 것이라고 생각합니다. 리눅스에서는 그렇지 않습니다. 그래서 세 줄의 "copy, stat, utime"조합이 가장 깨끗한 "Perl"솔루션입니다. 이것은 나에게보기 흉한 것으로 보이지만, 시스템 호출을 다시하지 않으면 유일한 옵션 인 것 같습니다. –