자주 파일 이름을 쉽게 바꾸고 싶습니다. 나는 항상 find
, grep
, xargs
및 sed
으로 투쟁해야한다. 나는 여기에 내 파일을 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]);
더 좋은 해결책이 있습니까?
'rename'명령 줄과 함께 wron이란 무엇입니까? –
'올바르게 이름 바꾸기'란 무엇입니까? 파일 이름에 예상되는 변환은 무엇입니까? 예 : 해당 디렉토리 목록의 예제 결과? – Sobrique
@putputer,'rename' 명령에 대한 문서를 찾지 못했습니다. 'rename --help' 또는'man rename '조차별로 유용하지 않습니다. PCRE와 함께 사용할 수 있습니까? – nowox