Enviado em 09/01/2013 - 17:30h
Pessoal, boa tarde.
Meu problema é o seguinte: Tenho uma pasta com várias sub-pastas e pilhas de arquivos dentro delas. Periodicamente, preciso renomeá-los para "nomedapastas_nomedasubpastas_nomedoarquivo.ext" e movê-los para um servidor FTP. Tenho um script que faz isso de forma primorosa, mas apenas se indico as pastas que vão ser executadas. Isso faz com que tenha que rodar 3 ou 4 scripts diferentes (um para cada pasta). Minha idéia inicial foi trabalhar com a criação de um log e usar o comando cat e while read, mas me deparei com uma questão. Como fazer para ele identificar o início da linha e comparar para ver se roda a ação A ou B? Abaixo, dou um exemplo.
Backup (raíz)
--FotoAlta (subdir 1)
----Recife (subdir 2)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
--FotoMedia (subdir 1)
----Recife (subdir 1)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
--FotoBaixa (subdir 1)
----Recife (subdir 1)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
Em cada subdir 1 terão várias subdir 2 e em cada subdir 2 terão várias imagens.
Preciso que o arquivo final saia com o nome de (exemplo): FotoAlta_Recife_DSC_0001.jpg, FotoAlta_Sampa_DSC_0002.jpg e assim por diante.
Comecei pensando no seguinte:
seria algo tipo:
Abraços,
Matheus.
Meu problema é o seguinte: Tenho uma pasta com várias sub-pastas e pilhas de arquivos dentro delas. Periodicamente, preciso renomeá-los para "nomedapastas_nomedasubpastas_nomedoarquivo.ext" e movê-los para um servidor FTP. Tenho um script que faz isso de forma primorosa, mas apenas se indico as pastas que vão ser executadas. Isso faz com que tenha que rodar 3 ou 4 scripts diferentes (um para cada pasta). Minha idéia inicial foi trabalhar com a criação de um log e usar o comando cat e while read, mas me deparei com uma questão. Como fazer para ele identificar o início da linha e comparar para ver se roda a ação A ou B? Abaixo, dou um exemplo.
Backup (raíz)
--FotoAlta (subdir 1)
----Recife (subdir 2)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
--FotoMedia (subdir 1)
----Recife (subdir 1)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
--FotoBaixa (subdir 1)
----Recife (subdir 1)
------DSC_0001.jpg
----Sampa (subdir 2)
------DSC_0002.jpg
Em cada subdir 1 terão várias subdir 2 e em cada subdir 2 terão várias imagens.
Preciso que o arquivo final saia com o nome de (exemplo): FotoAlta_Recife_DSC_0001.jpg, FotoAlta_Sampa_DSC_0002.jpg e assim por diante.
Comecei pensando no seguinte:
Obs.Se fizer da seguinte forma, como chamo essa rotina? dir="subdir_name" ?
#!/bin/bash
temp="/.temp"
dest="/WebDav"
server="/Backup"
log="backup.log"
find $server -type f -iname "*.[jJ][pP][gG]" | cut -c 8- > $log
# dessa forma, pego apenas os arquivos JPG e corto a entrada /Backup no log
cat $log | while read line
do
filename="${line##*/}"
# me retornou apenas o nome do arquivo.
subend="${line%/*}"
substart="${subend##*/}"
subdir="${substart}"
# me retornou o nome correto da sub-pasta sem nenhuma /.
dirend="${line%/*/*}"
dirstart="${dirend#/}"
dir="${dirstart}"
# me retornou o nome correto da pasta sem nenhuma /.
O que preciso, e ainda não sei como fazer, é testar se o nome da variável $dir é igual ao nome que procuro e depois rodar as ações.
subdir_name ()
{
end="${line%/*/*}"
start="${end#/}"
dir="${start}"
}
seria algo tipo:
E como fazer para várias pastas? Estou usando 3 como exemplo, mas tenho cerca de 6 pastas distintas (3 para jpg e 3 para RAW).
if [ $dir == "FotoAlta" ]
then
mv $line $log $dest/"dir"_"subdir"_"filename"
fi
ou testar para cada nome de pasta?
If
then
comandos
elif
comandos
else
comandos
fi
Agradeço desde já qualquer ajuda que possam me dar, pois já estou queimando a mufla faz alguns dias.
If
then
comandos
if
Abraços,
Matheus.