여러 파일 이름 바꾸기, Bash 스크립트(바람직하게는 add 사용)

여러 파일 이름 바꾸기, Bash 스크립트(바람직하게는 add 사용)

안녕하세요 여러분, Bash 스크립트를 만드는 데 몇 가지 문제가 있습니다. 7000개의 이미지 파일(dicom)이 있습니다. 이러한 파일은 함께 속하며 순서대로 디렉토리에 배치되어야 합니다. 그러나 이러한 파일을 생성하는 프로그램은 2048개 파일마다 새 하위 폴더를 열고 다시 시작하는 것 같습니다. 이 하위 폴더의 이미지 이름을 변경하고 싶습니다.

2048개의 이미지(IM_0001 ~ IM_2048)가 포함된 폴더가 있다고 가정해 보겠습니다. 900개의 이미지가 포함된 후속 폴더가 있습니다. (IM_0001에서 IM_0900으로 다시 이름이 지정됨)

제 생각에는:

  1. For 루프는 두 번째 폴더의 모든 파일을 반복합니다.
  2. mv IM_{number} IM_{number+2048} (따라서 IM_0001은 IM_2049가 됩니다.)

즉, 기본적으로 모두입니다. 이 작업(또는 이와 유사한 작업)을 수행하는 간단하고 효율적인 방법이 있습니까? 불행히도 저는 Bash 구문에 익숙하지 않으므로 어떤 의견이라도 주시면 감사하겠습니다. 이름이 비슷해야 해요! 따라서 단순히 두 번째 폴더에 있는 모든 프로젝트의 이름을 JM_0001에서 JM_0900으로 바꾸면 가져오기 도구(불행히도 작업하려면 해당 특정 도구를 사용해야 함)가 엉망이 됩니다.

감사합니다!

답변1

파일 이름에 확장자가 없는 경우:

for i in secondfolder/IM_* ; do mv "$i" "${i%_[0-9]*}_$[10#${i##*_}+2048]" ; done

답변2

간단한 방법 bash:

for i in $(ls /path/to/your-directory); do
name=$(echo "$i" | cut -d '_' -f1)
num=$(echo "$i" | cut -d'_' -f2)
num1=$(( num + 2048 ))
mv "$i" "${name}_$num1"
done

답변3

이것이 쉘 스크립트와 awk를 사용하여 이를 수행하는 기본 방법입니다.

이 예제 스크립트는 특정 사례에 대해 상당히 명시적이며 파일 이름의 두 번째 필드를 유효한 정수로 사용합니다. 그리고 파일 이름에 잘못된 밑줄이 없다는 것을 믿으세요. 보다 일반적인 스크립트는 필드 2가 단지 숫자인지 확인하고 필드 구분 기호를 매개변수로 만듭니다. 또한 파일 확장자(예: .img 또는 .png)가 없다고 가정합니다.

#!/bin/sh
WORKDIR=/(이름을 바꿀 파일이 있는 디렉터리)
수량 추가=2048
CD $WORKDIR
echo "이전 파일 새 파일"
ls IM_ * |읽는 동안 나는
하다
   newfile=`echo $i | awk -F_ -v incby=$NUM2ADD '{t=$2 + incby;printf "IM_%s",t;}'`
   에코 $i $새파일
   # 테스트를 드라이 런(dry running)한 후 결과가 확인되면 "echo"를 "mv"로 바꿉니다.
완벽한

파일 확장자가 있을 가능성이 높으므로 awk 줄을 다음과 같이 변경할 수 있습니다.

newfile=`echo $i | awk -F[_.] -v incby=$NUM2ADD '{t=$2 + incby; printf "IM_%s.%s",t,$3;}'`

이렇게 하면 파일 확장자가 유지되고 underscore_ 및 마침표가 필드 구분 기호로 사용됩니다.

관련 정보