Ajuda a criar script para mover arquivos com base na data ou no nome do arquivo

0

Eu tenho um processo de FTP que está constantemente colocando arquivos em um diretório. A data criada faz parte do nome do arquivo em um formato como este:

AAAA-MM-DD-HH-MM-SS-xxxxxxxxxx.wav

Eu gostaria de mover os arquivos para outro diretório com base na data em que o arquivo foi criado. Eu posso usar o nome do arquivo ou o carimbo de data, o que for mais fácil. Somente o mês e o ano precisam ser considerados. Eu criei diretórios usando o seguinte formato:

Jan_2016
Feb_2016

Eu tenho criado diretórios e movido os arquivos manualmente, mas eu gostaria de automatizar isso com um script bash que criará o diretório se ele não existir.

O que eu tenho feito até agora é criar manualmente os diretórios e, em seguida, executar este comando:

mv ./2016-02*.wav Feb_2016 /

Eu não tenho experiência em scripts e tenho certeza de que isso é muito fácil para alguém que faz isso.

Aprecie qualquer entrada sobre isso.

    
por djabe 12.02.2016 / 21:40

2 respostas

0
### 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 roteiro à luz dessas instruções e comandos. Você pode pedir ajuda se ficar preso

    
por 12.02.2016 / 22:22
0

Este script pode ajudar. (por favor remova o eco para 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
    
por 12.02.2016 / 22:23