Apagar arquivos de backup disco rígido externo

3

Eu estou procurando uma maneira de excluir arquivos de backup automáticos (aqueles no formato "filename.extension ~") de um disco rígido externo, onde eu mantenho um backup do meu disco principal.

Se os arquivos estivessem em / home, eu poderia apagá-los com bleachbit ou um programa similar, como o ubuntu tweak.

É possível fazer?

    
por Eduardo 04.02.2013 / 16:17

2 respostas

2

Aqui está uma maneira de fazer isso usando find . É um pouco mais avançado do que usar uma interface gráfica como o Ubuntu Tweak.

  1. Encontre o ponto de montagem do seu disco rígido externo. Existem várias formas:

    • No gerenciador de arquivos, pressione Ctrl + L para obter uma barra de localização baseada em texto. Copie este local absoluto para sua área de transferência.
    • Em um terminal, identifique o disco rígido usando cat /proc/mounts e localize o ponto de montagem. Exemplo:

      /dev/sdc1 /media/1589-880A vfat rw,nosuid,[...]
      

      Indica o ponto de montagem como /media/1589-880A .

  2. Abra um terminal e use o seguinte comando find para listar os arquivos correspondentes à pesquisa que estamos realizando. Substitua o caminho /media aqui pelo ponto de montagem que você acabou de encontrar na etapa anterior. Eu adicionei -type f para filtrar apenas por arquivos - desconsiderando links e diretórios.

    find /media/1589-880A -name "*~" -type f
    
  3. Se você se sentir feliz com os resultados e tiver certeza de que deseja excluir esses arquivos, faça a exclusão assim:

    find /media/1589-880A -name "*~" -type f -delete
    

    Observação: Esses arquivos não serão enviados para a Lixeira! Eles vão para o esquecimento imediatamente. Não é fácil desfazer. Não peça para desfazer isso.

Sinta-se à vontade para modificar o padrão *~ para permitir outras correspondências para outros casos de uso (por exemplo, *.bak , autobackup-2012-*.tar.gz , etc. Está apenas usando globalização simples. Também é perfeitamente possível selecionar uma subpasta ou até mesmo uma pasta pai em vez do ponto de montagem. De qualquer forma, sempre liste primeiro antes de excluir!

Opcionalmente, adicione -xdev ao comando find para evitar que ele desça para outros sistemas de arquivos se você não tiver certeza sobre isso.

    
por gertvdijk 04.02.2013 / 16:58
1

Em um prompt de linha de comando em um shell, você pode usar um comando como

rm -i *~

para excluir do diretório atual os arquivos cujos nomes terminam em ~. O -i sinalizador informa rm (o comando “remover”) para perguntar antes de excluir. Se você não estiver familiarizado com o uso de comandos shell, mantenha o sinalizador -i lá até que esteja familiarizado, porque erros menores, como um espaço no lugar errado, podem ter consequências importantes.

Para listar os arquivos que serão afetados no diretório atual, você pode dizer qualquer um dos seguintes itens.

ls *~
ls -l *~
ls -la *~

Para tornar um diretório específico o diretório de trabalho atual, use o comando cd e o nome do diretório. Por exemplo, se você deduzir que o disco de backup está montado em /media/xyz (seja pelo comando cat /proc/mounts mencionado em outra resposta ou mais diretamente pelo comando mount sem parâmetros ou via df ), você diria cd /media/xyz para tornar o diretório de nível superior da unidade de backup o diretório de trabalho atual.

Edit: O comando rm -i *~ afeta os arquivos apenas no diretório atual e não afeta os subdiretórios. Para tratar níveis indefinidos de diretórios, use a abordagem find fornecida em outra resposta. No entanto, se você souber o quanto os diretórios estão aninhados e o nível é superficial, use um comando como

rm -i  *~  */*~  */*/*~

que, como mostrado, excluiria arquivos ~ no diretório atual, seus subdiretórios diretos e seus subdiretórios diretos.

Editar 2: Como gertvdijk menciona em um comentário, o desajeitado rm mostrado na edição anterior pode ser simplificado usando ** Bash 4.0+ recursiva shell globbing ( 1 ). Depois que o comando shopt -s globstar for inserido, instâncias independentes de ** serão glob recursivamente, ou seja, representarão todos os nomes no diretório atual e seus descendentes. ( shopt -u globstar desativa globstar , mas como é improvável que alguém digite ** por engano, parece razoável deixá-lo ativado em shells interativos.) Assim, após shopt -s globstar , o comando rm -i **/*~ removerá ~ arquivos no diretório atual e seus descendentes. Observe que, se esses nomes de arquivos somam mais de alguns milhões de caracteres, a linha de comando pode se tornar muito longa para manipular o bash. A abordagem find não tem essa limitação específica.

    
por James Waldby - jwpat7 04.02.2013 / 17:06