1 votes

script convertir des fichiers en utilisant dos2unix

Je veux créer un script pour surveiller mon dossier local et à chaque fois qu'il reçoit un fichier commençant par frm* pour le convertir en utilisant dos2unix .

Ce script est toujours en cours d'exécution et continue de convertir les mêmes fichiers, qui sont déjà convertis, donc je pense que cela pourrait être une amélioration possible.

Ce que j'ai maintenant :

while true
do    
    dos2unix //path_to_folder/frm*    
done

Une aide ? Merci !

1voto

Jacob Vlijm Points 78990

L'astuce consiste à vérifier le contenu du dossier à certains intervalles, et à comparer la liste des fichiers avec la dernière vérification. Comme seuls les nouveaux fichiers doivent être convertis, les fichiers qui figuraient déjà dans la liste la dernière fois peuvent être ignorés.

C'est ce que fait le script ci-dessous. Il est en Python, mais le principe est le même dans n'importe quel langage.

Ce qu'il fait :

Quand le script s'initie, il fait une liste des fichiers dans le répertoire.
Puis, en boucle, toutes les 5 secondes :

  • il vérifie la présence de fichiers supplémentaires
  • si des fichiers supplémentaires ont été trouvés, ils seront convertis, les fichiers qui étaient déjà là sont ignorés.
  • il définit la dernière liste de fichiers vérifiée comme étant la "nouvelle" liste de fichiers initiale.

    !/usr/bin/env python3

    import subprocess import time

    directory = "/path/to/your/files"

    def current_files(): read = subprocess.check_output(["ls", directory]).decode("utf-8").strip() return [item for item in read.split("\n")]

    initial_files = current_files()

    while True: update = current_files() for item in update: if (item in initial_files, item.startswith("frm")) == (False, True): subprocess.call(["/bin/bash", "-c", "dos2unix", directory+"/"+item]) initial_files = update time.sleep(5)

Copiez le script dans un fichier vide, mettez le chemin d'accès à votre dossier, sauvegardez-le en tant que convert.py et exécuter le script en arrière-plan par la commande :

python3 /path/to/convert.py

0voto

muru Points 180007

Une manière fragile d'utiliser inotifywait y awk :

#!/bin/bash
DIR="/path/to/folder"
while FILE="$(inotifywait '$DIR'  -e close_write --format '%e,%f' | awk -F, '$NF ~ /^frm/{print $NF}')"
do     
    echo $FILE; 
    if [[ -f $FILE ]]
    then
        dos2unix "$DIR/$FILE"
    fi    
done

Notas:

  • Vous devez installer inotify-tools :

    sudo apt-get install inotify-tools
  • Cela permet de surveiller uniquement le close_write l'événement, donc dos2unix se produirait après que le processus qui l'a créé ou modifié ait fermé le fichier.

  • Vous pouvez également surveiller le répertoire de manière récursive en utilisant la commande -r option.

  • inotifywait a un --exclude qui accepte les expressions régulières étendues POSIX, mais la négation d'une regex (tout sauf frm ) est compliqué, et plus facile à réaliser dans awk .

  • Cette opération sera interrompue si les noms de fichiers contiennent une virgule. , . Choisissez un délimiteur dans le champ --format qui est garantie de ne pas apparaître dans un nom de fichier.

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