Como apagar arquivos selecionados por regras?

2

Eu tenho uma lista grande de .mp4 arquivos em um diretório em um NAS (Network Attached Storage).

Alguns estão listados da seguinte forma:

XXXXX_3800.mp4

e outros como

XXXXX_8000.mp4

XXXXX é o mesmo para os dois arquivos.

Eu gostaria de automatizar a exclusão do XXXXX_8000.mp4 , mas SOMENTE se o arquivo XXXXX_3800.mp4 existir.

Como devo proceder?

    
por Laurent06000 03.02.2015 / 23:14

2 respostas

4

  1. Vá para um terminal pressionando Ctrl + Alt + T e digite md bin
  2. Ir para o traço
  3. digite gedit e pressione Enter
  4. Copie e cole o seguinte texto:
    #!/bin/bash

    #
    # This script deletes video files of 8000 bps if and only if the 3800 bps file exists 
    # as set in https://sobrelinux.info/questions/63326/how-to-delete-files-selected-by-rules"deleting ${szFile:0:${#szFile}-8}8000.mp4..."
        rm -f ${szFile:0:${#szFile}-8}'8000.mp4'
      fi
    done
  1. Salve o arquivo em ~/bin/del8000
  2. Volte para o terminal e digite: chmod +x ~/bin/del8000
  3. No tipo de terminal: cd ~/Videos
  4. Digite del8000

Feito!

    
por Fabby 04.02.2015 / 00:10
1

Em um único diretório (plano)

Se todos os arquivos estiverem em um mesmo diretório, o script abaixo deve fazer o trabalho.

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

dr = sys.argv[1]; ids = ("_3800.mp4", "_8000.mp4")
checklist = [f[:-9] for f in os.listdir(dr) if f[-9:] in (ids)]
for f in [f for f in set(checklist) if checklist.count(f) != 1]:
    os.remove(dr+"/"+f+"_8000.mp4")

Como funciona:

  • O script lista todos os arquivos, terminando com _3800.mp4 ou _8000.mp4 , retirados de seus finais
  • Se o nome (stripped-) ocorrer duas vezes, as duas versões existirão (já que os nomes duplicados são impossíveis em um único diretório e o mesmo)
  • Posteriormente, o script remove a _8000.mp4 - versão das duplicatas

Em um diretório em camadas (pesquisa recursivamente)

Uma abordagem ligeiramente diferente. Ele compara arquivos recursivamente e (somente) exclui a _8000.mp4 - versão se a versão _3800.mp4 - existir.
Eu não tinha certeza se havia necessidade de uma pesquisa recursiva , mas a adicionei assim mesmo.

Como funciona:

  • Primeiro, liste os arquivos a serem mantidos de qualquer maneira
  • Em seguida, remova possíveis "throw aways", se existir a versão para manter.
#!/usr/bin/env python3
import os
import sys

files_dir = sys.argv[1]; file_list = []
#---
keep = "_3800.mp4"; rm = "_8000.mp4"
#---
for root, dirs, files in os.walk(files_dir):
    for name in files:
        if name.endswith(keep):
            file_list.append(name)
    for name in files:
        if name.endswith(rm) and name.replace(rm, keep) in file_list:
            os.remove(root+"/"+name)


Como usar

Para usar um desses scripts:

  1. Copie o script em um arquivo vazio, salve-o como clean_directory.py
  2. Execute-o, com o diretório para limpar como um argumento, pelo comando:

    python3 /path/to/clean_directory.py </path/to/directory/to/clean>
    
por Jacob Vlijm 09.02.2015 / 16:00