Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

[PHP] 파일명에서 숫자만 남기고 앞부분은 다른 문자열 붙여 주는 스크립트

이미지로 된 여러 jpg 파일이 사진1.jpg, 사진-2.jpg, …, IMG10.jpg 형식으로 돼 있을 때 정렬을 맞추려고 일일이 파일명 바꾸는 거 맨날 하기 귀찮아서 만든 스크립트다. 물론 윈도우에선 XnView로 맨날 처리했지만. 맥에서 쓰려고.

터미널에서 사용하면 되고, 사용법은 아래와 같다.

php rename.php myfolder 새사진

이렇게 사용하면 myfolder에 있는 모든 파일(!)이 새사진01.jpg 형식으로 파일명이 바뀐다. 자리수는 알아서 맞춘다. 만약 1부터 100까지 있다면 001로 맞춘다.

아래는 소스.

if($argc != 3){
  echo "invalid!\n";
  echo "Usage: php rename.php {dir} {prefix}\n";
  echo "ex. php rename.php . mypic\n";
  exit(0);
}
$this_file = $argv[0];
$dir = realpath($argv[1]);
$prefix = $argv[2];

if($handle = opendir($dir)){
  $files = array();
  $number_length = 0;
  while(false !== ($entry = readdir($handle))){
    if($entry == '.' || $entry == '..' || $entry == $this_file || is_dir($dir . '/' . $entry)){
      continue;
    }
    $this_len = strlen(preg_replace("/[^0-9]/", '', $entry));
    if($this_len > $number_length){
      $number_length = $this_len;
    }
    $files[] = $entry;
  }

  foreach ($files as $entry) {
    $ext = pathinfo($entry, PATHINFO_EXTENSION);
    $number = sprintf("%0{$number_length}d", preg_replace("/[^0-9]/", '', $entry));
    $new_name = $prefix . $number;
    if( ! empty($ext)){
      $new_name .= '.' . $ext;
    }
    rename($dir . '/' . $entry, $new_name);
  }
  echo "done!\n";
}else{
  echo "can't open dir {$dir}.\n";
}

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다