2011-07-28 5 views
2

나는 png 이미지에 대한 픽셀 강도 값을 생성하는 프로그램을 가지고 있으며 원래의 텍스트 파일에서 약간의 실패로 인해 같은 이름의 새 파일로 덮어 써야하는 경우가 종종 있습니다. 내가 가지고있는 질문은 내가 그 파일의 새 버전을 복사 할 때 대상 디렉토리가 먼저 같은 이름의 대상 파일을 제거해야합니까 아니면 대상 파일이 덮어 쓸 것인가입니다.펄 스크립트에서 cp를 실행하면 파일이 덮어 쓰기됩니까?

system ("rm -rf /home/alos/Y2H_images/all$intensity"); 
system ("cp $intensity /home/alos/Y2H_images/all"); 

또는 perl 스크립트에서 copy 명령을 실행하면 자동으로 파일을 덮어 쓰시겠습니까? 감사합니다

+0

왜 당신은'system()'을 사용하여 perl이 내장 함수 ('unlink')와 표준 모듈 ('File :: Copy')로 할 수있는 것들을 요구합니까? 당신은 결국 휴대 성과 성능을 희생합니다. – geoffspear

+0

안녕하세요. Wooble, 1 저는 perl에 익숙하지 않습니다. 2 이식성은이 프로그램이 집안에서만 사용되기 때문에 다른 시스템에 배포되지 않기 때문에 문제가되지 않습니다. 3 현재 성능을 자랑하는 프로그램에 만족하고 있으며 이러한 호출이 런타임에 많은 영향을 미치지 않았기 때문에 성능도 문제가되지 않습니다. 그러나 나는 지금부터이 방법을 사용할 것입니다. Wooble 감사합니다. – Alos

답변

2

의견에서 언급 한대로 File::Copy을 사용하는 것이 실제로 더 좋은 해결책입니다. 적어도 내 시스템에서는 대상 파일을 덮어 씁니다.

use File::Copy; 
copy $intensity, "/home/alos/Y2H_images/all" or die $!; 

는 대상 파일이 이미 존재 여부를 확인하고자하는 경우

, 즉이 수행 할 수 있습니다 :

print "File exists: $intensity\n" if -e $intensity; 

당신은 아직도 그것을 복사하기 전에 파일을 삭제하려면 :

unlink "/home/alos/Y2H_images/all$intensity" or die $!; 
3

단순히 새 파일을 복사 할 수 있으며 이전 파일은 바뀝니다.

cpin 플래그를 통해 덮어 쓰기 동작을 제어 할 수 있습니다. 어쨌든 기본적으로 파일은 덮어 씁니다.

system ("cp -f $intensity /home/alos/Y2H_images/all"); 
4

그것은 아니다 명령을 실행 : 특정 오류 조건, 즉, 대상 파일을 열 수 없습니다의 얼굴에서 안전하려면

, 당신은 -f 플래그를 지정할 수 있습니다 , 주어진 문자열을 인수로하여 Perl에 의해 호출되는 쉘입니다.

예, 정상적인 사본과 같습니다. 마치 셸에 직접 입력 한 것처럼 동일한 이름의 기존 파일을 모두 손상시키고 권한 오류 등으로 실패합니다. 쉘에 직접 타이핑했다.

또한 와일드 카드 확장 및 문자열 이스케이프는 쉘 특정이며 이식성이 이고 보안이 인 이유를 고려해야합니다.

2

system으로 전화하는 경우 '실제 생활'처럼 작동합니다. 예.

관련 문제