Bash 스크립트를 사용하여 여러 디렉터리의 여러 파일 이름 바꾸기

Bash 스크립트를 사용하여 여러 디렉터리의 여러 파일 이름 바꾸기

Bash 스크립트를 사용하여 여러 디렉터리에 있는 여러 파일의 이름을 바꾸고 싶습니다. Nishi_001부터 Nishi_772까지 772개의 디렉토리가 있습니다. 각 디렉터리의 파일 수는 다르지만 아래와 같이 파일 이름은 모든 디렉터리에서 유사하게 지정됩니다.

sample_001samout
sample_002samout
sample_003samout
sample_004samout
.
.
sample_00Nsamout  N=maximum 18

각 디렉터리의 파일 이름을 각 디렉터리에 특정한 특정 이름으로 바꾸고 싶습니다. 예를 들어 Nishi_001의 경우 다음 파일이 포함되어 있습니다.

sample_001samout
sample_002samout
sample_003samout

다음 형식으로 이름을 바꿉니다.

130906_Hiseq3A_l3_017_Dr_Nishikawa_AAGGTACA_L003_R1_001samout
130906_Hiseq3A_l3_017_Dr_Nishikawa_AAGGTACA_L003_R1_002samout
130906_Hiseq3A_l3_017_Dr_Nishikawa_AAGGTACA_L003_R1_003samout

772개의 디렉토리 각각은 서로 다른 새 이름을 갖습니다. 다음과 같은 새 이름 목록이 포함된 파일이 있습니다.

Nishi_003="130906_Hiseq3B_l7_003_Dr_Nishikawa_ATGCCTAA_L007_R1"
Nishi_004="130906_Hiseq3B_l7_004_Dr_Nishikawa_AGTGGTCA_L007_R1"
Nishi_005="130906_Hiseq3B_l7_005_Dr_Nishikawa_ACCACTGT_L007_R1"

특정 디렉터리의 모든 파일 이름은 파일 원본을 식별하기 위해 동일한 이름으로 변경됩니다. 이 새 이름은 해당 특정 디렉터리에 포함된 모든 파일에서 "sample"이라는 문구를 대체합니다.

예를 들어, Nishi_001 디렉토리에서 모든 파일의 "sample"이라는 문구는 다음으로 대체되어야 합니다.

"130906_Hiseq3A_l3_017_Dr_Nishikawa_AAGGTACA_L003_R1" 

Nishi_001 디렉토리의 구체적인 새 이름입니다.

답변1

맵 파일을 반복하고 디렉터리 및 이름 패턴을 두 개의 변수로 읽어서 명령에 사용해야 합니다 mv.

sed 's/"//g' map.txt | 
    while IFS="=" read dir name; do 
        for file in "$dir"/*; do 
            mv "$file" "${file/sample/$name}"
        done
    done 

설명하다

  • sed 's/"//g' map.txt: 대상 이름 주위의 따옴표를 제거합니다.
  • while IFS="=" read dir name; do: $IFS="="쉘에 입력을 분할하도록 지시 =하여 read dir name대상 디렉토리를 변수로 읽고 $dir이름을 에서 읽습니다 $name. 이는 명령의 출력에서 ​​실행되므로 따옴표가 없는 것과 같습니다 sed.$name
  • for file in "$dir"/*; do: 각각 $dir.
  • mv "$file" "${file/sample/$name}":구문은 문자열 이 로 대체되는 위치 ${var/pattern/replacement}를 인쇄합니다 . 따라서 여기에서는 파일 이름을 인쇄하고 현재 값인 .$varpatternreplacementsample$name

답변2

#!/bin/bash
for file in sample_00*
do
    replace_name=$(echo $file | sed "s/sample/130906_Hiseq3A_l3_017_Dr_Nishikawa_AAGGTACA_L003_R1/g" | cat )
    mv $file $replace_name
done

인용하다:단일 명령이나 스크립트를 사용하여 Unix에서 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

관련 정보