Encontre nomes de arquivos ausentes entre dois diretórios no Linux

3

Eu estou tentando comparar dois diretórios (A / B) no Linux e DELETE qualquer arquivo de B que NÃO exista em A.

Por exemplo, se o arquivo '1.jpg' existir no Diretório B, mas não existir no Diretório A, ele precisará ser excluído de B.

Eu tentei usar o diff, mas todos os arquivos são essencialmente diferentes, então parece não funcionar. (Eles são miniaturas de tamanhos diferentes, mas têm os mesmos id's). Então, isso deve ser feito apenas pelo nome do arquivo e ignorar o conteúdo real do arquivo.

Alguém por favor pode esclarecer como fazer isso com o mínimo de esforço?

    
por master00 06.06.2017 / 00:54

2 respostas

6

rsync pode fazer o que você quer com rapidez e facilidade:

rsync --dry-run --verbose --recursive --existing --ignore-existing --delete-after A/ B/

Da ajuda:

 --existing              skip creating new files on receiver
 --ignore-existing       skip updating files that already exist on receiver
 --delete                delete extraneous files from destination dirs

Remova a opção dry-run depois que você estiver satisfeito com os resultados propostos, para realmente executar as exclusões.

A página man tem uma descrição mais explícita das opções e até menciona o seu caso de uso:

   --existing, --ignore-non-existing
      This  tells rsync to skip creating files (including directories)
      that do not exist yet on the destination.   If  this  option  is
      combined  with  the  --ignore-existing  option, no files will be
      updated (which can be useful if all you want to do is to  delete
      extraneous files).


   --ignore-existing
      This  tells  rsync  to skip updating files that already exist on
      the destination (this does not ignore  existing  directores,  or
      nothing would get done).  See also --existing.
    
por 06.06.2017 / 01:42
3

Para diretórios de um nível

diff -u <(ls A) <(ls B) | sed -n '4,$s/^+//p' | xargs -I{} ls -l B/{}

ls -l deve ser alterado para rm -v após o teste, se estiver fazendo o que você deseja.

rsync melhor, com certeza. Mas apenas outra variante.

    
por 06.06.2017 / 02:03