find를 사용하여 여러 이름 바꾸기 명령 실행

find를 사용하여 여러 이름 바꾸기 명령 실행

일부 이름 바꾸기 명령과 함께 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위는 시운전용입니다.)

관련 정보