나는 도움이 필요해. 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