2 votes

Commandes ou script pour nettoyer le dossier média des types de fichiers indésirables.

J'ai un dossier de téléchargement de médias contenant toutes sortes de fichiers non pertinents, par exemple des fichiers readme, txt et torrent, en plus des fichiers mp4, avi, mp3 et autres fichiers médias valides.

Je veux un script ou un ensemble de commandes que je peux exécuter pour le nettoyer via cron ou quelque chose de régulier et parcourir tous les répertoires et sous-répertoires en supprimant les fichiers inutiles.

5voto

muru Points 180007

Créez un fichier avec les extensions que vous voulez supprimer, une par ligne (disons, dontwant.files ):

.txt
.nfo
.torrent
.csv

Combinez find con grep , xargs y rm :

find /path/to/media/directory -type f -print0 |
  grep -zFf /path/to/dontwant.files |
  xargs -0 rm
  • find con -type f y -print0 imprimera les noms de tous les fichiers qu'il trouve, séparés par le caractère ASCII NUL - le seul qui soit parfaitement sûr pour délimiter les chemins et les noms de fichiers.
  • grep con -z sépare les lignes par le caractère ASCII NUL, de sorte que chaque nom de fichier produit par find est traitée comme une ligne distincte. -F désactive la correspondance regex, et -f lit les motifs du fichier.
  • xargs con -0 lit les lignes séparées par des caractères ASCII NUL, et les utilise comme arguments pour la commande, dans ce cas-ci rm .

Cette méthode est facilement convertible en l'autre approche (supprimer toutes les extensions sauf certaines). Par exemple, avec un fichier comme want.files contenant :

.mp4
.srt
.avi
.mp3

seulement le grep doit être modifiée, en utilisant -v pour annuler les correspondances :

grep -vzFf /path/to/want.files |

2voto

Jacob Vlijm Points 78990

Le script ci-dessous nettoie votre répertoire de manière récursive. Il peut être exécuté à partir de cron ou une combinaison de touches de raccourci. L'utilisation est simple :

  1. Copiez-le dans un fichier vide, enregistrez-le en tant que clean_up.py

  2. Dans la section head du script, définissez les extensions à supprimer, dans la ligne :

    remove = [".txt", ".log"]
  3. Exécutez-le par la commande :

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

Le 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)

L'option négative

Si vous souhaitez procéder dans l'autre sens : seulement garder des types de fichiers spécifiques (extensions), supprimer tous les autres, utiliser la (version du) script ci-dessous :

#!/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)

Pour ajouter l'un ou l'autre des scripts ci-dessus à un raccourci : Choisissez : Paramètres système > "Clavier" > "Raccourcis" > "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande :

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

2voto

heemayl Points 85741

Sur la base de ce que nous avons obtenu jusqu'à présent de votre question :

Rechercher et supprimer :

Si vous voulez supprimer tous les fichiers ayant .txt o .torrent extension :

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

Alternativement, si vous voulez supprimer tous les fichiers qui n'ont pas .mp3 , .mp4 o .avi extension :

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

Ici, nous avons utilisé find avec OR -o pour obtenir les fichiers souhaités. Une fois les fichiers trouvés, nous les supprimons en appelant une seule instance de l'option rm .

Cron :

Si vous voulez l'exécuter en tant que cron vous pouvez placer la commande dans le répertoire de l'utilisateur. crontab avec quand vous voulez cron pour exécuter ceci. Par exemple, pour l'exécuter le dimanche à 23h00 chaque semaine :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X