2015-01-30 3 views
-2

에게 내가해야 할이 조금 특정 일을는 파일 이름, 그리고이 시간에 그것을 할 수있는 빠른 방법을 생각하는 내 머리를 강제 할 수없는, 그래서 이것은 내 문제 : 나는 많은 파일을 가지고변경은 첫 글자

라는 이름의이 가정 해 봅시다 :

word1_word2.ext 
word3_word4.ext 
word5_word5.ext 
.. 

나는 기본적으로 3 가지 일을, 자신의 파일 이름을 변경 OSX에 bash는/등 펄/스크립트를 만들 필요가 : 모든 단어를 대문자로

  • 을 첫 글자
  • 이 (가) _
  • 문자열을 추가가 문자 삭제 '.full'이름 뒤에, 확장

전에 그래서, 즉 ...

'whatever_whatever2_whatever3.jpg'는 '무엇이든 Whatever2 Whatever3을 becames. 어떤 도움을 크게 환영받을 것

: full.jpg '

+2

밑줄이 삭제되었거나 공백으로 대체 되었습니까? 텍스트에 삭제됨이 표시됩니다. 예를 들어 교체했다. –

답변

1

당신이

perl -e 'rename($_, tr/_/ /r =~ s/(?<!\.)\b([a-z])/\u$1/gr =~ s/(?=[^.]+$)/full./r) for glob "*.ext"' 
그것은 모든 공간에 밑줄 번역 tr///를 사용

, 그리고 대문자로 다음 s/// 단어로 시작하는 모든 소문자를 요청할으로이 펄 한 줄의 프로그램을 할 것입니다 접미사 앞에 도트 문자를 사용하지 말고 경계를 지정하고 다시 접미사 앞에 full.을 붙이십시오. trs 모두에 대해 비파괴적인 /r 수정자를 사용하므로 으로 바뀌지 않고 수정 된 문자열이 내부에서 편집됩니다.

+0

Worked Perfect!짧았 기 때문에 처음 것 대신에 이것을 사용했으나 어쨌든 감사합니다! – Ghost

1

당신의 예에 따라 이름을 변경, 명령 줄에서 파일의 목록을 취 간단한 버전 :

#!/usr/bin/perl 

use strict; 
use warnings; 
use File::Copy qw(move); 

for my $fn (@ARGV) 
{ 
    my $newfn = $fn; 

    # replace any spaces, tabs or _ with a single ' ' 
    $newfn =~ s/[_ \t]+/ /g;  

    # uppercase the first letter of any words in the new string 
    $newfn =~ s/(^|\s)([a-z])/$1\U$2/g; 

    # and add '.full' before any extension 
    $newfn =~ s/(\.[^\.]+)$/.full$1/g; 

    # and rename 
    move($fn, $newfn) or die "Unable to rename '$fn' to '$newfn': $!\n"; 
} 
+0

왜 내장'rename' 대신'File :: Copy :: move'를 사용해야합니까? 또한 공백을 공백으로 바꾸는 이유는 무엇입니까? 파일 확장명의 첫 글자도 대문자로 표기합니다. 마지막으로'uc ($ 1)'대신'\ U $ 1'을 사용하면'/ e' 수정자가 필요 없습니다. – Borodin

+0

맞습니다. 실수로 - 밑줄을 공백으로 대체합니다. 감사합니다. – Ghost

+0

@Borodin 확장 버그를 수정했습니다. & e'를 삭제했습니다. 감사합니다. 필자가 빌트인'rename'을 사용하여 제안한 마지막 시간 인'File :: Copy :: move'에 관해서는 주석 작성자가 저에게 뛰어 들었습니다 * ('File :: Copy :: move'는 더 유연하고 드라이브 간에서 작동합니다 , 등등 - 비록 'rename'이 * this * task에 완벽하게 적합하더라도). :-) –

0

당신은 (종종 prename이라고 함) 펄 기반 rename 명령은, 한 가정 :

$ prename -n 's/^./\U$&/; s/_(.)/\U$1/g ;s/\.[^.]+$/.full$&/' whatever_whatever2_whatever3.jpg 
whatever_whatever2_whatever3.jpg renamed as WhateverWhatever2Whatever3.full.jpg 
$ 

첫 번째 대체는 대문자로 선두 편지를 대체; 두 번째는 _xX으로 바꿉니다. 세 번째 문자는 접미어 문자열 앞에 점 (.full)을 삽입합니다 (점 뒤에 점이 없음). 밑줄을 지우는 대신 공백이 필요하면 두 번째 대체 방법으로 s/_(.)/ \U$1/g을 사용하십시오.

우분투 14.04 LTS 유도체에서 테스트되었습니다.

관련 문제