Eu tenho duas pastas Pasta A - Tem um total de 1786 arquivos dm4 Pasta B - Tem um total de 2131 tbz (arquivo de arquivo dos dm4s disponíveis nas pastas A e B) arquivos junto com 124 arquivos dm4 que não estão na Pasta A.
O objetivo é ter todos os dm4s em uma pasta e garantir que nenhum dos dm4s que tenham o arquivo tbz na pasta B. esteja faltando. No entanto, quando copio todos os 124 arquivos dm4 ausentes da pasta B para A, ele adiciona 1910 arquivos DM4. Porém, minha pasta B mostra que tenho 2131 tbz. Isso significa que preciso saber os nomes dos 221 arquivos dm4/tbz restantes que estão presentes na pasta b, para saber que eles estão faltando na minha lista de dm4s.
Qual é a maneira mais rápida de descobrir qual arquivo dm4s/tbz estou faltando neste caso.
Responder1
Para ter certeza de que entendi, isso está correto?
Você tem 2131 arquivos .tbz, e cada um deve ter um .dm4 correspondente, ou seja, arquivo de exemplo-09.tbz arquivo de exemplo-09.dm4 Mas estão faltando vários arquivos dm4 correspondentes e precisa descobrir quais são .
Supondo que esteja correto, isso deve funcionar (supondo que você não tenha nenhum espaço em branco nos nomes dos arquivos)
dm4_files="$(find A -name '*.dm4')"
for file in $(find B -name '*.tbz'); do
# || is a logical or operator; bash will only execute the right side if the left side fails (returns a non-zero exit code)
echo -e "$dm4_files" | grep -q "$(basename $file .tbz).dm4" || echo "Missing $(basename $file .tbz).dm4"
done
editar: adicionando instruções para execução devido à má formatação dos comentários
Para executar a partir de um terminal:
- Altere A e B acima para os caminhos completos para os diretórios em questão (como alternativa, faça cd para o diretório que contém ambos)
- Cole os comandos
Para executar a partir de um script:
- Coloque os comandos em um arquivo chamado check-dm4.sh no diretório com A e B (o sufixo .sh não faz nada, mas é convencional para scripts shell)
- Insira a seguinte linha no topo do arquivo (primeira linha)
#!/bin/bash
- Marque o arquivo como executável (chmod +x check-dm4.sh, ou com o botão direito->propriedades/como sua distro o chama) 4. Execute o arquivo