Tente algo assim:
#!/bin/bash
for filename in *.csv; do
dateTime=($(basename "${filename}" .csv | awk -F_ '{ print $2, $3 }'))
date="${dateTime[0]}"
time="$(echo "${dateTime[1]}" | sed -e 's/-/:/g')"
dir="$(date -d "${date} ${time}" +"%Y/%B/%d/%H")"
mkdir -p "${dir}"
mv "${filename}" "${dir}"
done
Basicamente, eu analiso a data e a hora, me transformo em algo que o
O comando date
pode consumir, use date
para produzir uma representação de string da estrutura de diretórios que você está procurando, criar esse diretório e mover o arquivo para esse diretório.
O formato do diretório é:
year/month/date/hour
Se você não quiser incluir o ano, omite o %Y/
no parâmetro para o comando date
.
Por favor, note que eu não testei muito isso, YMMV.