I'm in the following situation
> ls
H9/ HG01109_chr1_hap1_contigs.list HG01952_chr1_hap2_contigs.list HG02572/ HG03486_chr1_hap1_contigs.list
H9_chr1_hap1_contigs.list HG01109_chr1_hap2_contigs.list HG01978/ HG02572_chr1_hap1_contigs.list HG03486_chr1_hap2_contigs.list
H9_chr1_hap2_contigs.list HG01123/ HG01978_chr1_hap1_contigs.list HG02572_chr1_hap2_contigs.list HG03492/
HG00438/ HG01123_chr1_hap1_contigs.list HG01978_chr1_hap2_contigs.list HG02622/ HG03492_chr1_hap1_contigs.list
HG00438_chr1_hap1_contigs.list HG01123_chr1_hap2_contigs.list HG02055/ HG02622_chr1_hap1_contigs.list HG03492_chr1_hap2_contigs.list
HG00438_chr1_hap2_contigs.list HG01175/ HG02055_chr1_hap1_contigs.list HG02622_chr1_hap2_contigs.list HG03516/
HG00621/ HG01175_chr1_hap1_contigs.list HG02055_chr1_hap2_contigs.list HG02630/ HG03516_chr1_hap1_contigs.list
HG00621_chr1_hap1_contigs.list HG01175_chr1_hap2_contigs.list HG02080/ HG02630_chr1_hap1_contigs.list HG03516_chr1_hap2_contigs.list
HG00621_chr1_hap2_contigs.list HG01243/ HG02080_chr1_hap1_contigs.list HG02630_chr1_hap2_contigs.list HG03540/
HG00673/ HG01243_chr1_hap1_contigs.list HG02080_chr1_hap2_contigs.list HG02717/ HG03540_chr1_hap1_contigs.list
HG00673_chr1_hap1_contigs.list HG01243_chr1_hap2_contigs.list HG02109/ HG02717_chr1_hap1_contigs.list HG03540_chr1_hap2_contigs.list
HG00673_chr1_hap2_contigs.list HG01258/ HG02109_chr1_hap1_contigs.list HG02717_chr1_hap2_contigs.list HG03579/
HG00733/ HG01258_chr1_hap1_contigs.list HG02109_chr1_hap2_contigs.list HG02723/ HG03579_chr1_hap1_contigs.list
HG00733_chr1_hap1_contigs.list HG01258_chr1_hap2_contigs.list HG02145/ HG02723_chr1_hap1_contigs.list HG03579_chr1_hap2_contigs.list
HG00733_chr1_hap2_contigs.list HG01358/ HG02145_chr1_hap1_contigs.list HG02723_chr1_hap2_contigs.list NA18906/
HG00735/ HG01358_chr1_hap1_contigs.list HG02145_chr1_hap2_contigs.list HG02818/ NA18906_chr1_hap1_contigs.list
HG00735_chr1_hap1_contigs.list HG01358_chr1_hap2_contigs.list HG02148/ HG02818_chr1_hap1_contigs.list NA18906_chr1_hap2_contigs.list
HG00735_chr1_hap2_contigs.list HG01361/ HG02148_chr1_hap1_contigs.list HG02818_chr1_hap2_contigs.list NA20129/
HG00741/ HG01361_chr1_hap1_contigs.list HG02148_chr1_hap2_contigs.list HG02886/ NA20129_chr1_hap1_contigs.list
HG00741_chr1_hap1_contigs.list HG01361_chr1_hap2_contigs.list HG02257/ HG02886_chr1_hap1_contigs.list NA20129_chr1_hap2_contigs.list
HG00741_chr1_hap2_contigs.list HG01891/ HG02257_chr1_hap1_contigs.list HG02886_chr1_hap2_contigs.list NA21309/
HG01071/ HG01891_chr1_hap1_contigs.list HG02257_chr1_hap2_contigs.list HG03098/ NA21309_chr1_hap1_contigs.list
HG01071_chr1_hap1_contigs.list HG01891_chr1_hap2_contigs.list HG02486/ HG03098_chr1_hap1_contigs.list NA21309_chr1_hap2_contigs.list
HG01071_chr1_hap2_contigs.list HG01928/ HG02486_chr1_hap1_contigs.list HG03098_chr1_hap2_contigs.list
HG01106/ HG01928_chr1_hap1_contigs.list HG02486_chr1_hap2_contigs.list HG03453/
HG01106_chr1_hap1_contigs.list HG01928_chr1_hap2_contigs.list HG02559/ HG03453_chr1_hap1_contigs.list
HG01106_chr1_hap2_contigs.list HG01952/ HG02559_chr1_hap1_contigs.list HG03453_chr1_hap2_contigs.list
HG01109/ HG01952_chr1_hap1_contigs.list HG02559_chr1_hap2_contigs.list HG03486/
where I do have two files .list which I should move to the corresponding directory based on their prefix e.g H9 should look like this at the end of the process:
[ 128] H9
├── [ 15] H9_chr1_hap1_contigs.list
└── [ 15] H9_chr1_hap2_contigs.list
1 directory, 2 files
I was testing some of my old code to do so, but it requires a lot of tweaking. So, upon searching I found a one-liner that seemed intuitive and I edited; however, I'm missing on something since it isn't working...
This is the original code:
find . -name "*.txt" -exec bash -c 'folder=$(basename "{}" .txt); mv "{}" "./$folder/"' \;
and that is how I edited it:
find . -name "*.list" -exec bash -c 'folder=$(basename "{}" _chr[A-Z,0-9,a-z]\+_hap[1-2]_contigs.list); mv "{}" "./$folder/"' \;
Now, I kept the regex since I have several chr folders besides chr1 with numbers up to 22, or followed by letters that can be in combinations of uppercase and lowercase. Any help is appreciated, thanks!
{}inside the shell command string can allow for arbitrary execution of some file names as commands and AFAIK it doesn't help or even make a difference whether it's quoted or not ... Use it like e.g.sh -c 'file="$1"; ...' sh {}