Hi,
I apologize in advance for the long explanation. I am fairly new at coding.
Any suggestion would be greatly appreciated.
I have the intention to organize the folders from
parent
|-- out
|-- 1.Amber
| |-- seed-1_clean.e1.log
| |-- seed-1_clean.e2.log
| |-- seed-1_test.idx
| |-- seed-2_clean.e1.log
| |-- seed-2_clean.e2.log
| `-- seed-2_test.idx
|-- 2.Dragon
| |-- seed-1.ppt
| `-- seed-2.ppt
|-- 3.Chris
| |-- seed-1.tar.gz
`-- seed-2.tar.gz
to something like this
parent
|-- seed-1
|-- 1.Amber
| |-- seed-1_clean.e1.log
| |-- seed-1_clean.e2.log
| `-- seed-1_test.idx
|-- 2.Dragon
| `-- seed-1.ppt
|-- 3.Chris
| `-- seed-1.tar.gz
|-- seed-2
|-- 1.Amber
| |-- seed-2_clean.e1.log
| |-- seed-2_clean.e2.log
| `-- seed-2_test.idx
|-- 2.Dragon
| `-- seed-2.ppt
|-- 3.Chris
`-- seed-2.tar.gz
I got it to work with the following code
#!/usr/bin/env bash
aa='1.Amber'
bb='2.Dragon'
cc='3.Chris'
for s in out/"$aa"/*_c*; do
sn=${s%%_*}
sn=${sn##*/}
echo "$sn"
mkdir -p "${sn}"/"$aa"
mkdir -p "${sn}"/"$bb"
mkdir -p "${sn}"/"$cc"
for i in out/"$aa"/*; do
if grep -q "$sn" <<< "$i"; then
mv "$i" "$sn"/"$aa"/.
for i2 in out/"$bb"/*; do
if grep -q "$sn" <<< "$i2"; then
mv "$i2" "$sn"/"$bb"/.
for i3 in out/"$cc"/*; do
if grep -q "$sn" <<< "$i3"; then
mv "$i3" "$sn"/"$cc"/.
fi
done
fi
done
fi
done
done
However, if I have more files to organize, it would become very long and tedious.
Is there a way that I could shorten this?
Also, for the echo "$sn" part, I got repeated output of seed-1 and seed-2. I'm guessing it's because I have 2 similar files (_clean.e1.log, _clean.e2.log). How do I make it so the same file name only echo once?
Please help
Thanks so much
--- Post updated at 01:43 PM ---
In addition, I've tried
for s in out/"$aa"/*_c*; do
sn=${s%%_*}
sn=${sn##*/}
echo "$sn"
mkdir -p "${sn}"/{"$aa", "$bb", "$cc"}
done
It came out like this
parent
|-- 2.Dragon,
|-- 3.Chris}
|-- seed-1
|-- {1.Amber,
|-- seed-2
|-- {1.Amber,