Comandos ou script para limpar a pasta de mídia de tipos de arquivos indesejados

1

Eu tenho uma pasta de download de mídia com todos os tipos de arquivos irrelevantes, por exemplo arquivos readme, txt e torrent, além do mp4, avi, mp3 e outros arquivos de mídia válidos.

Eu quero um script ou um conjunto de comandos que eu possa executar para limpá-lo via cron ou algo em uma base regular e passar por todos os diretórios e sub-diretórios removendo arquivos desnecessários.

    
por Norman Bird 22.04.2015 / 22:09

3 respostas

5

Crie um arquivo com as extensões que você deseja remover, uma por linha (digamos, dontwant.files ):

.txt
.nfo
.torrent
.csv

Combine find com grep , xargs e rm :

find /path/to/media/directory -type f -print0 |
  grep -zFf /path/to/dontwant.files |
  xargs -0 rm
  • find com -type f e -print0 imprimirá os nomes de todos os arquivos que encontrar separados pelo caractere ASCII NUL - o único que é perfeitamente seguro para delimitar caminhos e nomes de arquivos.
  • grep com -z separa as linhas pelo caractere ASCII NUL, de forma que cada nome de arquivo gerado por find seja tratado como uma linha separada. -F desativa a correspondência de expressão regular e -f lê padrões do arquivo.
  • xargs com -0 lê linhas separadas por caracteres ASCII NUL e as usa como argumentos para o comando, neste caso rm .

Isso é facilmente convertido para a outra abordagem (remova todos, exceto algumas extensões). Por exemplo, com um arquivo como want.files , contendo:

.mp4
.srt
.avi
.mp3

somente o comando grep precisa ser alterado, usando -v para negar correspondências:

grep -vzFf /path/to/want.files |
    
por muru 22.04.2015 / 23:37
2

Com base no que chegamos longe de sua pergunta:

Encontrar e remover:

Se você deseja remover todos os arquivos com .txt ou .torrent extensão:

find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +

Como alternativa, se você deseja remover todos os arquivos que não têm .mp3 , .mp4 ou .avi extension:

find /path/to/dir -type f -not \( -name '*.mp3' -o -name '*.mp4' -o -name '*.avi' \) -execdir rm {} +

Aqui usamos a opção find com OR -o para obter nossos arquivos desejados, quando encontramos os arquivos que os removemos chamando uma única instância de rm .

Cron:

Se você quiser executá-lo como um trabalho cron , poderá colocar o comando na entrada crontab do usuário quando quiser que cron execute isso. Por exemplo, para executar isso no domingo, às 23 horas, toda semana:

00 23 * * 0 find /path/to/dir -type f \( -name '*.txt' -o -name '*.torrent' \) -execdir rm {} +
    
por heemayl 22.04.2015 / 22:48
2

O script abaixo limpa seu diretório recursivamente. Pode ser executado a partir de cron ou de uma combinação de teclas de atalho. O uso é simples:

  1. Copie-o em um arquivo vazio, salve-o como clean_up.py
  2. Na seção principal do script, defina as extensões a serem removidas, na linha:

    remove = [".txt", ".log"]
    
  3. Execute-o pelo comando:

    python3 /path/to/clean_up.py <directory_to_clean_up>
    

O script:

#!/usr/bin/env python3
import os
import sys

#--- set the extensions to remove below
remove = [".txt", ".log"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if any([file.endswith(s) for s in remove]):
            os.remove(file)

A opção negativa

Se você quiser fazer o contrário: apenas mantenha tipos de arquivos específicos (extensões), remova todos os outros, use o script (versão do) abaixo:

#!/usr/bin/env python3
import os
import sys

#--- add all extensions you'd like to keep below
keep = [".mp4", ".mp3"]
#---

for root, dirs, files in os.walk(sys.argv[1]):
    for file in files:
        file = os.path.join(root, file)
        if all([not file.endswith(s) for s in keep]):
            os.remove(file)

Para adicionar um dos scripts acima a um atalho: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

python3 /path/to/clean_up.py <directory_to_clean_up>
    
por Jacob Vlijm 22.04.2015 / 22:27