apaga arquivos que não estão dentro de outra pasta

1

Eu tenho dois diretórios chamados thumb e thumb2. Eles contêm os mesmos nomes de arquivos, mas são diferentes em tamanho. Infelizmente, existem alguns arquivos no thumb2 que não são úteis e que precisam ser removidos.

$ ls ../thumb2 | wc -l
199030

$ ls ../thumb | wc -l
193455

Eu estou procurando por um comando de linha de comando que irá apagar todos os arquivos do thumb2 que também não estão no polegar.

Alguém tem uma ideia de como fazer isso?

    
por merlin 08.03.2012 / 17:44

2 respostas

5

Eu testei essa solução com uma pequena amostra, mas faça backup de seus diretórios antes de tentar:

cd ../thumb2
for f in *; do test -e ../thumb/$f || echo rm $f; done

Eu não tenho um diretório com milhares de arquivos, então não sei se esse comando funciona para uma amostra tão grande. Por favor, tente depois de fazer o backup de seus diretórios. Quando tiver certeza de que o comando funciona corretamente, remova o comando echo .

Atualizar

Aqui está uma versão modificada da excelente solução da Glenn:

diff thumb thumb2 | \
while read field1 field2 dir filename; do 
    [[ $dir = "thumb2:" ]] && echo rm "thumb2/$filename"
done
    
por 08.03.2012 / 18:07
2

Você também pode chamar diff para examinar o conteúdo do diretório:

diff thumb thumb2 |
while read line; do
  case "$line" in
    "Only in thumb2: "*) echo rm "thumb2/${line#*: }" ;;
  esac
done

Remova echo se estiver satisfeito de que está funcionando.

    
por 08.03.2012 / 18:31

Tags