이름 스프레드시트를 사용하여 많은 파일의 부분 이름을 고유한 이름으로 변경

이름 스프레드시트를 사용하여 많은 파일의 부분 이름을 고유한 이름으로 변경

나는 도움이 필요해. bash를 사용하여 고유한 파일 이름으로 많은 파일의 이름을 바꾸고 싶습니다. 원본 파일 이름의 일부를 유지하고 싶습니다.

예를 들어:

현재 파일 이름 새 파일 이름
F1.R23.fastq.gz 10_1.F1.R23.fastq.gz
F2.R7.fastq.gz 비어 있음_3_1.F2.R7.fastq.gz
F32.R3.fastq.gz 63_3.F32.R3.fastq.gz
F5.R7.fastq.gz Blank_3.F5.R7.fastq.gz
F2.R2.fastq.gz N5_1.F2.R2.fastq.gz

내가 가지고 있는 것은 원래 이름이 있는 열과 이름에 추가하려는 내용이 있는 열이 있는 파일입니다. 이와 같이:

문서 견본
F1.R23.fastq.gz 10_1
F2.R7.fastq.gz 비어있음_3_1
F32.R3.fastq.gz 63_3
F5.R7.fastq.gz 공백_3
F2.R2.fastq.gz N5_1

누구든지 이 작업을 수행할 수 있는 방법이 있다면 매우 감사하겠습니다. 이름을 바꿔야 하는 파일이 수천 개 있을 수 있으며 그 중 일부는 이름이 복잡하고 순서가 무작위이므로 이 작업을 수동으로 수행하는 것은 실제로 불가능합니다.

감사합니다!

답변1

files-to-rename.csv먼저 스프레드시트를 CSV 형식으로 변환하거나 라는 CSV 파일을 만듭니다 . 파일 내용은 다음과 같아야 합니다.

F1.R23.fastq.gz,10_1
F2.R7.fastq.gz,empty_3_1
F32.R3.fastq.gz,63_3
F5.R7.fastq.gz,Blank_3
F2.R2.fastq.gz,N5_1

그런 다음 이 명령을 실행하여 파일과 동일한 디렉터리에 있는지 확인합니다.

while IFS=$',\r' read -r source dest ; do
  mv -v "$source" "${dest}.${source}"
done < files-to-rename.csv

csv 파일에 DOS 줄 끝이 있으면 위 방법이 작동하지 않습니다. 이 dos2unix files-to-rename.csv명령을 사용하여 파일이 UNIX 줄로 끝나는지 확인할 수 있습니다.


그렇지 않은 경우에는 다음과 같은 더 안전한 코드 조각을 사용하세요.

while read line; do
  source=$(echo $line | cut -d, -f1)
  dest=$(echo $line | cut -d, -f2)

  mv -v "$source" "${dest}.${source}"
done < files-to-rename.csv

관련 정보