일부 이름 바꾸기 명령과 함께 find 명령을 사용하고 싶습니다. 나는 무엇을 해야 합니까?
find
이것은 명령으로 실행하려는 시퀀스입니다.
rename "s/ /-/g" * ; rename 'y/A-Z/a-z/' * ; rename 's/[.]-/-/g' * ; rename 's/--/-/g' *
답변1
rename
여기서 혼자일 필요는 없습니다 . 이름이 바뀐 첫 번째 코드는 파일 경로( 에 저장된 대로)에 필요한 수정을 수행하는 모든 코드 argument
일 수 있으며 , 그 중 하나를 사용할 필요는 없습니다 .perl
$_
s/pattern/replacement/flags
여기에서 다음을 수행할 수 있습니다.
find . -depth -exec rename -n -d '
$_ = lc $_; # lowercase
s/[ .-]*[ -]+/-/g' {} +
또는 rename
지원하지 않는 경우 -d
:
find . -depth -mindepth 1 -exec rename -n '
my ($dirname, $basename) = m{(.*)/(.*)}s;
$basename = lc $basename; # lowercase
$basename =~ s/[ .-]*[ -]+/-/g;
$_ = "$dirname/$basename"' {} +
<0-or-more-spaces-or-dot-or-dash><1-or-more-spaces-or-dash>
이렇게 하면 모든 것이 대시로 바뀌지 만 s/.../.../
s로 구분하여 모든 s를 수행할 수 있습니다 ;
.
find . -depth -exec rename -n -d '
s/ /-/g;
y/A-Z/a-z/;
s/[.]-/-/g;
s/--/-/g' {} +
-d
그럼에도 불구하고 교체가 기본 이름에만 적용되고( 도 마찬가지 ) 리프의 이름이 해당 분기 이전에 변경되는지( 도 마찬가지 -depth
) 확인하려고 합니다 .
( -n
위는 시운전용입니다.)