2014-09-08 4 views
0

* .DIF 파일의 이름을 * .SUC 파일로 바꾸고 싶습니다. 다음 스크립트는 "sh : bad substitution"오류를 나타냅니다. 내 OS가 Linux가 아니기 때문에 "이름 바꾸기"를 사용할 수 없습니다.perl 스크립트에서 쉘 명령을 실행하십시오.

$com="for i in *.DIF; do mv \$i \${i/DIF/SUC}; done;"; 
print $com."\n"; 
print `$com`; 

출력 :

for i in *.DIF; do mv $i ${i/DIF/SUC}; done; 

sh: bad substitution

+0

실행하는 동안 "의 난에 대한 * .DIF, 수행; 내가 $ {내가/DIF/SUC가} MV $을" 쉘에 잘 작동합니다. –

+0

왜 perl'rename' 함수를 사용하지 않으시겠습니까? – Barmar

+0

왜 스크립트가'SUC'를 가지고 있지만 출력에'DIFFF'가 있습니까? – Barmar

답변

1

당신이 펄의 rename에 문제가있는 경우는, 이동 및 복사 파일을 File::Copy, 플랫폼 독립적 인 모듈을 사용합니다. 그것은 핵심 모듈이므로 이미 Perl 설치의 일부 여야합니다.

쉘에 입력 할 때 시스템 명령이 작동하지만 펄에서는 입력하지 않으면 시스템 명령이 예상되는 쉘을 사용하고 있지 않을 가능성이 높습니다. 하지만 시스템에 대한 자세한 정보가 필요합니다.

1

Perl 내에서 쉽게 수행 할 수있는 파일 작업을 수행 할 필요가 없습니다.

다음은 모든 .dif 확장 파일의 이름을 .suc으로 바꿉니다.

use strict; 
use warnings; 

use File::Copy qw(move); 

move($_, s/dif$/suc/r) for glob('*.dif'); 
0

는 기본적 펄 대신 {//} this question 도움이 허용 bash는,의, 쉬를 사용하고 있었다 될 수있다. 마지막으로 내가 사용 :

open my $bash_handle, '| bash' or die "Cannot open bash: $!"; 
print $bash_handle 'for i in *.SUC; do mv $i ${i/SUC/DIF}; done;'; 
관련 문제