1
resposta

Dúvida numa variação do caso de varredura de pastas

Prezados Alurianos, BOA NOITE !!!

Após ver as aulas desse tópico, parti para uma experiência com uma dificuldade que sempre tive. Vou expor o problema e pedir a ajuda dos amigos.

Tenho uma hierarquia de pastas com ANO MES e DIA ( /pastaX/2022/05/01; /pastaX/2022/05/02... /pastaX/2022/05/31), dentro de cada pasta DIA tenho arquivos com formatos PDF, identificados de forma única com um ID.

Tenho diversos arquivos em cada pasta, porém apenas alguns são necessários, e tenho uma listagem [listaPDF.CSV] dizendo quais são esses arquivos (um ID por linha). Exemplo, numa pasta pode ter 100 arquivos, mas só preciso de especificamente 28 deles, e esses 28 estão no CSV.

Problemas que tenho: Fazer a 'varredura' de cada pasta DIA, comparar se em uma pasta existem arquivos da lista CSV, se existirem PDFs conforme a lista então executar uma COPIA dos arquivos para uma nova pasta [/pastaX/arquivos_copiados/].

Fiz conforme abaixo mas não funcionou:

#!/bin/bash

copia_pdf(){
    local caminho_imagem=$1
    find . -maxdepth 1 -type f | xargs cp -t /pastaX/arquivos_copiados/;
}

varrer_diretorio(){
    cd $1
    for arquivo in *.pdf 
    do
        local caminho_arquivo=$(find /pastaX/2018/ -name $arquivo)
        if [ -d $caminho_arquivo ]
        then
            varrer_diretorio $caminho_arquivo
        else
            copia_pdf $caminho_arquivo
        fi
    done < /pastaX/2018/listapdf2018.csv 
}

varrer_diretorio ~/pastaX/2018/

copia_pdf 2> /pastaX//2018/erros_copia_2018.txt

if [ $? -eq 0 ]
then
    echo "Copia feita com sucesso"
else
    echo "Houve um problema na copia"
fi

Quem poderia caridosamente ajudar-me nessa dúvida ?

1 resposta

Olá Rodney, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Uma possível solução para o seu cenário seria utilizar o comando grep para verificar se o ID do arquivo está presente na lista CSV. Além disso, você pode utilizar o comando cp para fazer a cópia dos arquivos encontrados. No código abaixo apresento um exemplo de implementação do script:

#!/bin/bash

copia_pdf(){
    local caminho_imagem=$1
    cp "$caminho_imagem" /pastaX/arquivos_copiados/
}

varrer_diretorio(){
    cd "$1"
    while IFS= read -r arquivo || [[ -n "$arquivo" ]]
    do
        local caminho_arquivo=$(find /pastaX/2018/ -name "$arquivo")
        if [ -d "$caminho_arquivo" ]
        then
            varrer_diretorio "$caminho_arquivo"
        else
            if grep -q "^$arquivo$" /pastaX/2018/listapdf2018.csv
            then
                copia_pdf "$caminho_arquivo"
            fi
        fi
    done < /pastaX/2018/listapdf2018.csv 
}

varrer_diretorio ~/pastaX/2018/

if [ $? -eq 0 ]
then
    echo "Cópia feita com sucesso"
else
    echo "Houve um problema na cópia"
fi

Nesse exemplo, utilizei o comando grep -q para verificar se o ID do arquivo está presente na lista CSV. O parâmetro -q faz com que o grep não exiba a saída, apenas retorne um código de saída indicando se encontrou ou não uma correspondência.

Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!