2014-12-25 2 views
2

자주 파일 이름을 쉽게 바꾸고 싶습니다. 나는 항상 find, grep, xargssed으로 투쟁해야한다. 나는 여기에 내 파일을 Bash oneliner는 파일 이름의 이름을 바꿉니다.

PCRE

를 사용하여 더 나은 일을 할 수있는 방법을 이해하고 싶습니다 :

$ find . 
. 
./08447.ctags 
./10565.gitignore 
./38037.inputrc 
./42257.bashrc 
./51395.gitk 
./63705.gitconfig 
./66352.octave_hist 
./67049.ahk 
./85869.vimrc 
./89518.minttyrc 
./desktop.ini 
./dp4FontViewer64.exe 
./SBZSwitcher_v1.8.9.7z 
./xlive.rar 
나는이 oneliner으로 할 수있는 나는 제대로 점 파일의 이름을 바꿀 것

:

$ find . | grep -e '^[.]\/[0-9]\+[.]' | sed -r 's/^.*[.](\w+)$/\0 .\1/' | xargs -n2 mv 

그러나이 명령은 매우 복잡하며 쉽게 사용할 수있는 것을 찾고 있습니다.

$ rename 's/^\.\/\d+\.(\w+)$/\1/' . 

제 대안은 Perl 스크립트를 작성하는 것입니다 :

#!/usr/bin/env perl 
use 5.010; 
use File::Find; 

die "Wrong regexp!" unless 
    $ARGV[0] =~ m/^ 
     s(?<delimiter>\/|~|@|;|%|`|\|) 
     (?<search>.*) 
     (?&delimiter) 
     (?<replace>.*) 
     (?&delimiter) 
     (?<flags>.*)$/x; 

my $search = join('', map("(?$_)", split('', $+{flags}))).$+{search}; 
my $replace = '"'.$+{replace}.'"'; 
find(sub { rename($_, s/$search/$replace/ree) }, $ARGV[1]); 

더 좋은 해결책이 있습니까?

+2

'rename'명령 줄과 함께 wron이란 무엇입니까? –

+1

'올바르게 이름 바꾸기'란 무엇입니까? 파일 이름에 예상되는 변환은 무엇입니까? 예 : 해당 디렉토리 목록의 예제 결과? – Sobrique

+0

@putputer,'rename' 명령에 대한 문서를 찾지 못했습니다. 'rename --help' 또는'man rename '조차별로 유용하지 않습니다. PCRE와 함께 사용할 수 있습니까? – nowox

답변

3

간단한 해결책이 있습니다.

당신의 rename 명령은 괜찮습니다하지만 당신은,이 순환하려면 다음

shopt -s globstar 
rename 's/^\.\/\d+\.(\w+)$/\1/' ** 

find -type f -exec rename 's/^\.\/\d+\.(\w+)$/\1/' {} + 

warning http://pix.toile-libre.org/upload/original/1377510865.png하는 수도 이름이 같은 다른 도구가 있습니다 또는이 작업을 수행하지 못할 수도 있으므로 조심하십시오.

다음 명령 (linux)

$ file $(readlink -f $(type -p rename)) 

을 실행하고 당신은 ELF

은 다음이 될 것으로 보인다 포함

.../rename: Perl script, ASCII text executable 

아니라 같은 결과가있는 경우 올바른 도구 =)

,

그렇지 않은 경우는, Ubuntu 같은 Debian 및 파생 상품에 그것을 기본 (보통 이미 사건을) 만들려면 :

$ sudo update-alternatives --set rename /path/to/rename 

(당신의 perl's rename 명령의 경로에 /path/to/rename를 교체합니다. 이 명령이없는 경우


, 패키지 관리자를 검색하여 설치하거나 do it manually하지 적어도


마지막으로,이 도구는 원래 래리 벽, 펄의 아버지에 의해 작성되었습니다.

+0

우수하지만, 항상이 f *** ing rename 도구가 절대적으로 좋다고 생각했습니다. 쓸데없는. 사실 난 올바른 도구를 사용한 적이 없다. 래리가 쓴 경우, 내 기대와 일치해야합니다 :) 고마워. – nowox

관련 문제