bashawkmv

How to move files to different folders based on their prefix?


> ls 

6_2_S28_R1_001.fastq.gz  
19_1_S160_R1_001.fastq.gz
25_3_S114_R1_001.fastq.gz
rep1
rep2
rep3

My goal

I am trying to move each file to a different folder based on the prefix, that is related to the replicate

6_2_S28_R1_001.fastq.gz,   #this file needs to be moved to rep2
19_1_S160_R1_001.fastq.gz, #this file needs to be moved to rep1
25_3_S114_R1_001.fastq.gz, #this file needs to go to rep3 folder

I have tried an unsuccessful for loop. What can I try next?


Solution

  • #! /bin/bash
    for f in *_*_*_*_*.gz; do
        i="${f#*_}"; i="${i%%_*}"
        d="rep$i"
        echo "Move '$f' to '$d'"
        mkdir -p "$d" \
        && mv "$f" "$d"
    done