Hoe een Taak uit te Voeren Wanneer een Nieuw Bestand wordt Toegevoegd aan een Map in Linux

0
322
Fatmawati Achmad Zaenuri/Shutterstock.com

Deze tutorial zal u tonen hoe te gebruiken Linux bestandssysteem gebeurtenissen (kennis) te krijgen elke keer dat een bestand wordt weergegeven in een map. U kan deze gebruiken als triggers voor het automatiseren van veel voorkomende taken op uw systeem.

We gaan tot het schrijven van een script dat kijkt naar een map en handelingen op nieuwe bestanden die worden toegevoegd. Elk bestand is een gzip-bestand en verplaatst naar een andere map, zodra het wordt ontdekt. Het script maakt gebruik van de inotify subsysteem, door middel van een programma genaamd inotify-tools. Maar laten we eerst het hulpprogramma installeren en te experimenteren.

Het installeren van inotify-tools en gzip

Apt-get gebruiken om deze package installeren op uw systeem als u gebruikmaakt van Ubuntu of een andere Debian-gebaseerde distributie. Op andere Linux distributies, gebruik maken van uw Linux-distributie is de package beheer tool voor in de plaats.

sudo apt-get install inotify-tools gzip

Experimenteren met inotify-tools

Laten we beginnen door te kijken naar een map en zien wat evenementen initiëren wanneer nieuwe bestanden komen. We zullen gebruik maken van een tool genaamd inotifywatch , die deel uitmaakt van inotify-tools. Maak een nieuwe map met de naam “inkomende”:

mkdir inkomende

Beginnen met het kijken naar deze map door het uitvoeren van de volgende opdracht:

inotifywatch -v inkomende

Dit zal instrueren inotify om naar te kijken voor alle bestandssysteem gebeurtenissen in de “inkomende” directory. De -v optie maakt het hulpprogramma print extra informatie over wat het doet. We hebben het nog niet opgegeven time-optie (-t ), en de opdracht zal houden het verzamelen van evenementen tot we afsluiten met CTRL+C. Op dit punt, onze terminal moet er als volgt uitzien:

Open een nieuw terminal venster (of tabblad) en wijziging van de inkomende directory. Gebruik het touch commando uit om een nieuw bestand maken met de naam “nieuw-bestand.”

cd inkomende/
raak nieuw-bestand

Ga nu terug naar de eerste terminal venster en stop inotifywatch door op CTRL+C.

Een tabel van gebeurtenissen zal worden geserveerd naar de console, met vermelding van een exemplaar van “maken”, “open” “attrib” en “close_write.” Deze vier gebeurtenissen die plaatsvonden toen we contact om een nieuw bestand te maken, stelt u de toegang tot het bestand kenmerken, opende het schrijven van een null-terminating character, en sloot vervolgens het daarna. Dit zijn slechts enkele van de vele gebeurtenissen die kunnen worden gecontroleerd op een bestandssysteem met inotify-tools. U kunt de volledige lijst op de hoofdpagina voor inotifywatch.

Voor onze doeleinden zijn we alleen geïnteresseerd in twee gebeurtenissen:

  • “maak” – wanneer een bestand wordt gemaakt in de doelmap.
  • “moved_to” – wanneer een bestand wordt verplaatst vanaf een andere locatie in de doelmap.

Laten we proberen inotifywatch opnieuw, maar dit keer met de instructie om te controleren van deze twee evenementen. Deze opdracht uitvoeren in het eerste terminal venster:

inotifywatch -v -e-e moved_to inkomende

In de tweede terminal venster of tabblad, laten we proberen het maken van een nieuw bestand, het veranderen van de inhoud, en dan het verplaatsen van het bestand van een andere locatie naar de doelmap. Al deze commando ‘ s worden uitgevoerd vanaf de home directory.

raak inkomende/gemaakt
echo Testing123 >> inkomende/gemaakt
contact /tmp/created2
mv /tmp/created2 inkomende/

Ga terug naar de eerste terminal venster en stop inotifywatch door op CTRL+C. We zien de volgende output:

Slechts twee gebeurtenissen werden geteld: het maken van een bestand met de naam “created.txt” en verplaatsen van een bestaand bestand met de naam “created2.txt”. Al het andere, zoals het veranderen “created.txt” dat was genegeerd.

Het kijken naar een Map en het Uitvoeren van een Taak

Nu we weten wat de gebeurtenissen te volgen, kunnen we gebruik maken van een andere applicatie genaamd inotifywait te blokkeren uitvoering tot een bestand is aangemaakt of verhuisd naar een doelmap. We gebruiken dezelfde argumenten als dat we deden met inotifywatch en ook aangeven hoe we willen dat de bestandsnaam moet worden geformatteerd voor gebruik in onze taak.

Voordat we beginnen, moeten we een directory voor bestanden die al zijn verwerkt. Maak een map genaamd “verwerkt”:

mkdir verwerkt

Maak een nieuw script met de naam “watch-incoming.sh” en voegt u de inhoud hieronder:

#!/bin/bash

TARGET=~/incoming/
VERWERKTE=~/verwerkt/

inotifywait -m -e-e moved_to –formaat “%f” $TARGET
| lees BESTANDSNAAM
doen
echo Ontdekt $FILENAME, te verplaatsen en te zippen
mv “$TARGET/$FILENAME” “$VERWERKT/$FILENAME”
gzip “$VERWERKT/$FILENAME”
gedaan

Het script voert de inotifywait opdracht met de -m optie te gebruiken. Dit maakt de opdracht wordt gecontroleerd op wijzigingen voor onbepaalde tijd. Elke keer een nieuwe gebeurtenis wordt gedetecteerd, wordt de bestandsnaam wordt doorgegeven aan het lezen van de opdracht en geïnjecteerd in de “FILENAME” variabele. Het blok onder de while-lus wordt uitgevoerd, waarin het bestand is voor het eerst naar de “verwerkt” map en vervolgens gzip. Het oorspronkelijke bestand vervangen door het gecomprimeerde bestand en de bestandsnaam zal eindigen in “.gz”.

Laten we de subsidie van het uitvoeren van permissies op dit script en voer het uit onze home directory.

chmod u+x watch-incoming.sh
./watch-incoming.sh

Open de tweede terminal venster en maak een nieuw bestand in de “inkomende” directory. Een lijst met de inhoud van zowel de “inkomend” en “verwerkt” map om de resultaten te zien van de gebeurtenis wordt gedetecteerd:

De ruwe tekst bestand dat we het gekopieerd naar de “inkomende” directory is gedetecteerd door het script gekopieerd in “verwerkt” en vervolgens gecomprimeerd met gzip.

We kunnen wat interessante taken, dat zijn we nu in staat zijn om naar te kijken voor nieuwe bestanden die in een map. Bijvoorbeeld, we kunnen toevoegen van een watermerk aan image-bestanden comprimeren raw-video ‘ s in mp4-formaat en zelfs het uploaden van elk nieuw bestand zien we een Amazon S3 bucket. Dit script is een goed uitgangspunt voor het rollend uw eigen workflows en het automatiseren van veel voorkomende taken op uw systeem.