
Eu tenho um processo de FTP que constantemente coloca arquivos em um diretório. A data de criação faz parte do nome do arquivo em um formato como este:
AAAA-MM-DD-HH-MM-SS-xxxxxxxxxx.wav
Gostaria de mover os arquivos para outro diretório com base na data em que o arquivo foi criado. Posso usar o nome do arquivo ou o carimbo de data, o que for mais fácil. Apenas o mês e o ano precisam ser considerados. Eu criei diretórios usando o seguinte formato:
Jan_2016
Feb_2016
Tenho criado diretórios e movido os arquivos manualmente, mas gostaria de automatizar isso com um script bash que criará o diretório se ele não existir.
O que tenho feito até agora é criar manualmente os diretórios e depois executar este comando:
mv ./2016-02*.wav fev_2016/
Responder1
### capitalization is important. Space separated.
### Null is a month 0 space filler and has to be there for ease of use later.
MONTHS=(Null Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
cd /your/ftp/dir ### pretty obvious I think
for file in *.wav ### we are going to loop for .wav files
do ### start of your loop
### your file format is YYYY-MM-DD-HH-MM-SS-xxxxxxxxxx.wav so
### get the year and month out of filename
year=$(echo ${file} | cut -d"-" -f1)
month=$(echo ${file} | cut -d"-" -f2)
### create the variable for store directory name
STOREDIR=${year}_${MONTHS[${month}]}
if [ -d ${STOREDIR} ] ### if the directory exists
then
mv ${file} ${STOREDIR} ### move the file
elif ### the directory doesn't exist
mkdir ${STOREDIR} ### create it
mv ${file} ${STOREDIR} ### then move the file
fi ### close if statement
done ### close the for loop.
Este deve ser um bom ponto de partida para uma pessoa inexperiente. Tente escrever seu script à luz destas instruções e comandos. Você pode pedir ajuda se ficar preso
Responder2
Este script pode ajudar. (por favor, remova o eco dos arquivos mv):
#!/bin/bash
shopt -s nullglob
month=(Jan Feb Mar May Apr Jun Jul Aug Sep Oct Nov Dec)
for y in 2016; do
for m in {01..12}; do
fn="$y-$m"
dn="${month[10#$m-1]}_$y"
[[ ! -d $dn ]] && mkdir -p "$dn"
for file in ./"$fn"*.wav; do
echo mv "$file" "./$dn/${file#\./}"
done
done
done