No Solaris, você pode obter a data de um arquivo em um formato utilizável com ls -E
.
Itere todos os arquivos no diretório de log. Para cada arquivo, obtenha a data, crie o diretório de destino, se necessário, e mova o arquivo.
for f in /var/opt/ers/logs/rio/*; do
ymd=$(ls -Eog "$f" | awk '{print $4}')
target=/ersdg3/ERS/ERS_INPUT_LOGS/RIO/LOGS/RIO_$ymd
mkdir -p "$target"
mv "$f" "$target"
done
Observe que os diretórios de arquivamento terão nomes como RIO_2012-07-31
em vez de RIO_31-Jul-2012
. Eu recomendo o formato Y-M-D porque ele classifica em ordem cronológica. Se você realmente precisa ter nomes de mês abreviados e o pedido DMY, use ls -e
em vez de ls -E
e altere a chamada awk de acordo:
mdy=$(ls -eog "$f" | awk '{print $5 "-" $4 "-" $7}')
Se você precisar procurar arquivos em subdiretórios recursivamente, chame find
para iterar todos os arquivos e, novamente, execute o fragmento de shell para cada arquivo.
find /var/opt/ers/logs/rio -type f -exec sh -c '
ymd=$(ls -Eog "$0" | awk "{print \}")
target=/ersdg3/ERS/ERS_INPUT_LOGS/RIO/LOGS/RIO_$ymd
mkdir -p "$target"
mv "$0" "$target"
' {} \;
Com find
, você pode adicionar ! -newer somefile
antes de -exec
para corresponder somente arquivos que são mais antigos que somefile
. Você pode adicionar -mtime 42
para corresponder apenas aos arquivos que foram modificados há pelo menos 42 dias.