루프를 사용하여 여러 파일 이름 바꾸기

루프를 사용하여 여러 파일 이름 바꾸기

루프를 사용하여 일부 파일의 이름을 바꿔야 하지만 아직 Linux를 처음 사용하기 때문에 작동하도록 할 수 없습니다. 이름을 바꿔야 하는 파일은 다음과 같습니다.

E9-GOWN33_multiplemap.bin.10.fa  
E9-GOWN33_multiplemap.bin.16.fa  
E9-GOWN33_multiplemap.bin.21.fa  
E9-GOWN33_multiplemap.bin.7.fa

다음과 같이 더 짧은 이름으로 변경:

E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa

rename스레드에서 본 및 다른 루프를 사용했지만 mv여전히 작동하도록 할 수 없습니다. 모든 의견을 보내 주시면 감사하겠습니다! 감사합니다!

답변1

renamePerl (Ubuntu, Debian 및 기타 여러 시스템의 기본값)이 있는 경우 다음을 수행할 수 있습니다.

rename -n 's/-GOWN33_multiplemap//' ./*fa

올바른 파일 이름이 제공되면 -n실제로 이름을 바꾸려면 없이 실행하세요.

rename 's/-GOWN33_multiplemap//' ./*fa

답변2

다음을 시도해 볼 수 있습니다.

for f in *.fa; do 
  echo mv -- "$f" "${f%-*}.${f#*.}"
done

결과:

E9.bin.10.fa
E9.bin.16.fa
E9.bin.21.fa
E9.bin.7.fa

답변3

해당 파일이 모두 현재 디렉터리에 있고 다른 파일이 아닌 모든 파일이 globbing 패턴과 일치한다고 가정합니다.

E9-GOWN33_multiplemap.bin.*.fa

그런 다음 다음을 사용하여 반복할 수 있습니다.

for name in E9-GOWN33_multiplemap.bin.*.fa; do
   # more code here
done

루프 내부에는 $name이러한 파일 중 하나의 이름이 있습니다.

E9-GOWN33_multiplemap.bin.10.fa에 이름이 주어지면 다음을 사용하여 이름 시작 부분에서 비트를 $name제거할 수 있습니다 .E9-GOWN33_multiplemap

${name#E9-GOWN33_multiplemap}

E9그런 다음 초기 문자열을 그 앞에 다시 연결하여 다음을 생성하면 됩니다 E9.bin.10.fa.

newname=E9${name#E9-GOWN33_multiplemap}

그런 mv다음 이전 파일 이름을 새 이름으로 바꿀 수 있습니다.

mv "$name" "$newname"

그래서 우리는

for name in E9-GOWN33_multiplemap.bin.*.fa; do
    newname=E9${name#E9-GOWN33_multiplemap}
    mv "$name" "$newname"
done

또는 더 짧거나,

for name in E9-GOWN33_multiplemap.bin.*.fa; do
    mv "$name" "E9${name#E9-GOWN33_multiplemap}"
done

답변4

for f in *.fa; do mv -- "$f" "${f/-*p./.}"; done
  • 입력:
    E9-GOWN33_multiplemap.bin.7.fa
    E9-GOWN33_multiplemap.bin.10.fa
    E9-GOWN33_multiplemap.bin.16.fa
    E9-GOWN33_multiplemap.bin.21.fa
    
  • 산출:
    E9.bin.7.fa
    E9.bin.10.fa
    E9.bin.16.fa
    E9.bin.21.fa
    

당신도 이 스크립트를 사용할 수 있습니다:

#!/bin/bash

# Set the directory path where the files are located
directory="/path/to/files"

# Loop through the files in the directory
for file in "$directory"/E9-GOWN33_multiplemap.bin.*.fa; do
    # Extract the original filename
    filename=$(basename "$file")
    
    # Extract the numeric part from the original filename
    number=$(echo "$filename" | awk -F'.' '{ print $3 }')
    
    # Create the new filename
    new_filename="E9.bin.$number.fa"
    
    # Rename the file
    mv "$file" "$directory/$new_filename"
done

이 스크립트에서 for 루프는 지정된 디렉터리에서 E9-GOWN33_multiplemap.bin.*.fa 패턴과 일치하는 파일을 반복합니다. 루프 내에서 원본 파일 이름은 basename을 사용하여 추출됩니다. 그런 다음 awk를 사용하여 숫자 부분을 추출합니다. 마지막으로 고정된 부분(E9.bin.)과 추출된 번호를 결합하여 새로운 파일명이 구성됩니다. mv 명령은 파일 이름을 새 파일 이름으로 바꾸는 데 사용됩니다.

관련 정보