Discussion:
[shell-script] for para mover arquivos por data
Cesar Rodrigues bambamcbreal@gmail.com [shell-script]
2018-09-19 16:37:27 UTC
Permalink
Boa tarde, galera!

TÃŽ precisando de uma luz pra fazer um script pra mover arquivos por data.
Vamos supor que eu tenha o seguinte diretório: /tmp/archive/.
Dentro do diretório /tmp/archive/, tem vários arquivos com a nomenclatura
nome-data, exemplo:
nodejs-2018-05-25.gz / nodejs-2018-04-26.gz / nodejs-2018-03-31.gz etc...

Cada arquivo desse tem que ir pra uma pasta com estrutura do tipo:
/backup/2018/05/28/ - /backup/2018/03/31/ - /backup/2018/02/20/ e assim por
diante.

Ou seja: Cada arquivo tem que ir pra pasta com a mesma data especificada no
arquivo.
/backup/2018/05/28/nodejs-2018-05-28.gz
/backup/2018/03/30/nodejs-2018-03-30.gz

Desde já agradeço a ajuda.
Janduy Euclides janduyeuclides@googlemail.com [shell-script]
2018-09-19 17:21:02 UTC
Permalink
Fala Cesar, boa tarde.

Tudo bem?

Amigo, segue a minha ideial, é algo simples mas funcional, vou dar um
exemplo de como pode ser feito e ai você adéqua a sua necessidade..

O script ficaria assim:

#!/bin/bash

#Variaveis
DIA=$(date +%d)
MES=$(date +%m)
ANO=$(date +%Y)

if [ -e "/backup/$ANO/$MES/$DIA/" ] then
echo " O caminho da pasta ano/dia ja existe e está correto "
# SYNC ARQUIVOS
rsync -avg /tmp/archive/nodejs-$ANO-$MES-$DIA.gz /backup/$ANO/$MES/$DIA/

else
echo "Sera criado o caminho padrao da pasta data"
mkdir -p /backup/$ANO/$MES/$DIA/
# DIRETORIO CRIADO E FAZENDO O SYNC DOS ARQUIVOS
rsync -avg /tmp/archive/nodejs-$ANO-$MES-$DIA.gz /backup/$ANO/$MES/$DIA/
fi

Acredito este é o caminho, o if checa se o seu destino tem a pasta, se
tiver ele faz o sync caso contrario ele criar o diretorio e faz o sync, dê
uma lida na opcao do RSYNC tem uma opcao que ao terminar ele remove da
origem, bem bacana.

Espero que ajude abraço.

________________________

Janduy Euclides - dCAA, FreePBX, Xorcom CompletePBX-v4/v5, SBC e PBX Basic.
E-mail: ***@gmail.com
Tel.: +55 11 9-9835-1136
Acesse - Asterisk help! <http://www.asterisk.help/>
Visite - Fundação Asterisk Libre - FAL <http://www.asterisklibre.org/>

________________________

<https://www.linkedin.com/in/janduyeuclides/>
Post by Cesar Rodrigues ***@gmail.com [shell-script]
Boa tarde, galera!
TÃŽ precisando de uma luz pra fazer um script pra mover arquivos por data.
Vamos supor que eu tenha o seguinte diretório: /tmp/archive/.
Dentro do diretório /tmp/archive/, tem vários arquivos com a nomenclatura
nodejs-2018-05-25.gz / nodejs-2018-04-26.gz / nodejs-2018-03-31.gz etc...
/backup/2018/05/28/ - /backup/2018/03/31/ - /backup/2018/02/20/ e assim
por diante.
Ou seja: Cada arquivo tem que ir pra pasta com a mesma data especificada
no arquivo.
/backup/2018/05/28/nodejs-2018-05-28.gz
/backup/2018/03/30/nodejs-2018-03-30.gz
Desde já agradeço a ajuda.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-09-19 17:56:09 UTC
Permalink
Será isso?

for Arq in *
{
mv $Arq $(sed -r
's|([a-z]+)-([0-9]{4})-([0-9]{2})-([0-9]{2}).*|\4/\3/\2/\1|')
}
Fiz um sed com o cmd substitute (s) usando as barras verticais como
separadores, parenteses para agrupar e os retrovisores invertendo a ordem
de ocorrência da data e do literal.
Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by Cesar Rodrigues ***@gmail.com [shell-script]
Boa tarde, galera!
TÃŽ precisando de uma luz pra fazer um script pra mover arquivos por data.
Vamos supor que eu tenha o seguinte diretório: /tmp/archive/.
Dentro do diretório /tmp/archive/, tem vários arquivos com a nomenclatura
nodejs-2018-05-25.gz / nodejs-2018-04-26.gz / nodejs-2018-03-31.gz etc...
/backup/2018/05/28/ - /backup/2018/03/31/ - /backup/2018/02/20/ e assim
por diante.
Ou seja: Cada arquivo tem que ir pra pasta com a mesma data especificada
no arquivo.
/backup/2018/05/28/nodejs-2018-05-28.gz
/backup/2018/03/30/nodejs-2018-03-30.gz
Desde já agradeço a ajuda.
itamarnet@yahoo.com.br [shell-script]
2018-09-20 01:22:32 UTC
Permalink
Caro Cesar


Minha humilde sugestão


#!/bin/bash

for arq in *.gz
do
echo "$arq" |
awk -F '[.-]' '{print $(NF-3), $(NF-2), $(NF-1)}' |
while read ano mes dia
do
[ -e "/backup/$ano/$mes/$dia" ] || mkdir -p "/backup/$ano/$mes/$dia"
mv "$arq" "/backup/$ano/$mes/$dia"
done
done



[]'s
Itamar
Ronie Marcio Marcondes Coelho roniemarcio@hotmail.com [shell-script]
2018-09-19 17:15:40 UTC
Permalink
Ola Cesar, boa tarde

Daria pra usar awk pra gerar os comandos:

ls -1 nodejs-????-??-??.gz | awk -F"-" '{ print "mkdir -p /backup/"$2" ; mkdir -p /backup/"$2"/"$3" ; mkdir -p /backup/"$2"/"$3"/"substr($4,1,2)"; mv " $0 " /backup/"$2"/"$3"/"substr($4,1,2)"/" }' > /tmp/distribuiarquivos

chmod +x /tmp/distribuiarquivos
sh /tmp/distribuiarquivos
rm /tmp/distribuiarquivos


A saida no arquivo /tmp/distribuiarquivos seria:
mkdir -p /backup/2018 ; mkdir -p /backup/2018/03 ; mkdir -p /backup/2018/03/31; mv nodejs-2018-03-31.gz /backup/2018/03/31/
mkdir -p /backup/2018 ; mkdir -p /backup/2018/04 ; mkdir -p /backup/2018/04/26; mv nodejs-2018-04-26.gz /backup/2018/04/26/
mkdir -p /backup/2018 ; mkdir -p /backup/2018/05 ; mkdir -p /backup/2018/05/25; mv nodejs-2018-05-25.gz /backup/2018/05/25/


Boa Sorte
[]s
Ronie

Em 19/09/2018 13:37, Cesar Rodrigues ***@gmail.com<mailto:***@gmail.com> [shell-script] escreveu:

Boa tarde, galera!

TÃŽ precisando de uma luz pra fazer um script pra mover arquivos por data.
Vamos supor que eu tenha o seguinte diretório: /tmp/archive/.
Dentro do diretório /tmp/archive/, tem vários arquivos com a nomenclatura nome-data, exemplo:
nodejs-2018-05-25.gz / nodejs-2018-04-26.gz / nodejs-2018-03-31.gz etc...

Cada arquivo desse tem que ir pra uma pasta com estrutura do tipo:
/backup/2018/05/28/ - /backup/2018/03/31/ - /backup/2018/02/20/ e assim por diante.

Ou seja: Cada arquivo tem que ir pra pasta com a mesma data especificada no arquivo.
/backup/2018/05/28/nodejs-2018-05-28.gz
/backup/2018/03/30/nodejs-2018-03-30.gz

Desde já agradeço a ajuda.
Cesar Rodrigues bambamcbreal@gmail.com [shell-script]
2018-09-20 23:05:52 UTC
Permalink
Então, pessoal... fui pela forma que consegui entender mais e que se
adequou perfeitamente para o que eu precisava.
Usei a forma que o Itamar informou. Adaptei até um sed pra fazer alguns
cortes em alguns arquivos que estavam vindo com alguns nomes bem estranhos.

Passei uns dois dias tentando fazer um loop funcionar e tomei bola. Depois
de dois dias resolvi pedir a ajuda de vocês, rs.
Agradeço à todos que contribuíram com um pedaço do código.

Muito obrigado mesmo!!

Em qui, 20 de set de 2018 às 05:10, Ronie Marcio Marcondes Coelho
Post by Ronie Marcio Marcondes Coelho ***@hotmail.com [shell-script]
Ola Cesar, boa tarde
ls -1 nodejs-????-??-??.gz | awk -F"-" '{ print "mkdir -p /backup/"$2" ;
mkdir -p /backup/"$2"/"$3" ; mkdir -p
/backup/"$2"/"$3"/"substr($4,1,2)"; mv " $0 "
/backup/"$2"/"$3"/"substr($4,1,2)"/" }' >
/tmp/distribuiarquivos
chmod +x /tmp/distribuiarquivos
sh /tmp/distribuiarquivos
rm /tmp/distribuiarquivos
mkdir -p /backup/2018 ; mkdir -p /backup/2018/03 ; mkdir -p
/backup/2018/03/31; mv nodejs-2018-03-31.gz /backup/2018/03/31/
mkdir -p /backup/2018 ; mkdir -p /backup/2018/04 ; mkdir -p
/backup/2018/04/26; mv nodejs-2018-04-26.gz /backup/2018/04/26/
mkdir -p /backup/2018 ; mkdir -p /backup/2018/05 ; mkdir -p
/backup/2018/05/25; mv nodejs-2018-05-25.gz /backup/2018/05/25/
Boa Sorte
[]s
Ronie
Boa tarde, galera!
TÃŽ precisando de uma luz pra fazer um script pra mover arquivos por data.
Vamos supor que eu tenha o seguinte diretório: /tmp/archive/.
Dentro do diretório /tmp/archive/, tem vários arquivos com a nomenclatura
nodejs-2018-05-25.gz / nodejs-2018-04-26.gz / nodejs-2018-03-31.gz etc...
/backup/2018/05/28/ - /backup/2018/03/31/ - /backup/2018/02/20/ e assim por diante.
Ou seja: Cada arquivo tem que ir pra pasta com a mesma data especificada no arquivo.
/backup/2018/05/28/nodejs-2018-05-28.gz
/backup/2018/03/30/nodejs-2018-03-30.gz
Desde já agradeço a ajuda.
Loading...