fájlok létezésének ellenőrzése listából

 ( Nextra | 2018. január 9., kedd - 19:16 )

Merre induljak el? (bash)

Adott a CRONTAB, melyben ott figyelnek a periodikusan lefutó feladatok.
Adott egy FŐKÖNYVTÁR, melyben számos véletlenszerű alkönyvtár jöhet létre, és abban számos olyan sh parancs, mely belekerült a CRONTAB-ba.
Ha letörlöm a már szükségtelenné vált sh állományt, szeretném ha automatikusan törlődne a CRONTAB-ból is az őt futtató bejegyzés.

Az sh fájloknak különböző nevei lehetnek, és különböző mappákban helyezkedhetnek el a FŐKÖNYVTÁRON belül.

Egyetlen közös pont van. Minden sh fájlban benne van a CRON szó. De az adott helyen nem csak az sh fájl rendelkezhet a CRON szóval.
De azoknak más a kiterjesztésük.

Arra gondoltam hogy kigyűjtöm a CRONTAB-ból pld. grep segítségével a CRON szót tartalmazó fájlneveket, de ez sem egyszerű.
Mivel változhatnak a fájlnevek, melyben szóközök is lehetnek. Inkább csak a fájlnév egy részét gyűjteném ki.
Például a CRON szótól jobbra, a sor végéig.
Ekkor ilyesmik kerülnének a fájllistába.
CRON_1515083934.sh
CRON_1515062712.sh
Ezek alapján kéne megtalálni az ezt tartalmazó fájlokat a FŐKÖNYVTÁR almappáiban. Ha nincs eredmény akkor az adott sort a CRONTAB-ból ki lehet törölni. (Sóhaj - Ezt is hogyan? - gondolom sed-del.)

Van-e esetleg erre kész feature? Vagy meg kell írni szkriptet?
De mégis milyen parancsokat vessek be? Én nem vagyok programozó, és ráadásul csak a bash szintaktikáját ismerem úgy ahogy.
S nyilván ezt az ellenőrző rutint is be kell majd tennem a CRON-ba. De ez inkább az /etc/cron,daily-ba kerül.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

for cmd in `find ./ -name 'CRON_*.sh'`; do $cmd; done

>>Minden sh fájlban benne van a CRON szó.
Mármint a nevében, ugye?

>>Vagy meg kell írni szkriptet?
Ha nem manuálisan akarod elvégezni a feladatot, akkor biztosan. (Sóhaj:-)

Találsz ötleteket, ha rákeresel erre a neten:
modifying crontab from bash script

Vagy esetleg megbarátkozol a Pythonnal, és akkor használhatod ezt:
https://pypi.python.org/pypi/python-crontab
https://code.tutsplus.com/tutorials/managing-cron-jobs-using-python--cms-28231

Érdekelne hogyan kerülnek a CRON_....sh fájlok a crontab-ba, annak kapcsán, hogy a FŐKÖNYVTÁR-ban "véletlenszerűen" létrejönnek az alkönyvtárak; mert lehet, hogy abba a folyamatba kellene belenyúlni.

--
eutlantis

"Érdekelne hogyan kerülnek a CRON_....sh fájlok a crontab-ba,"

Hát ezt már nem nagyon piszkálnám. Készítettem egy interaktív dvb-c "videómagnót" Vagyis van egy USB-s dvb-c stickem, de utáltam hogy amikor fel akartam venni, mindig parancssorban irkáljak. Az elérhető frontendek meg nagyon nem akartak működni. A vlc egyszerűen le sem kezeli a w_scan-nal direkt neki gyártott channel_list-et, de az mplayerét sem.
KDE-t használok, de a Gnome-os ME tv azért működik, de sokszor elszáll. A tvheadend -et nem is értem. Be sem tudtam normálisan állítani.

S mivel ez személyi számítógép, személyre szabtam a dolgokat.

Írtam tehát sok kicsi bash szkriptet, melyek egymásra épülnek. A dvbRip kilistázza az elérhető tévécsatornákat, megkérdezi melyiket akarom felvenni, abból is hány percet. Most, vagy időzítve, egyszeri alkalommal, vagy sorozat lesz? A felvétel után kikapcsolja-e a gépet...
S ekkor - az azonnali felvétel kivételével - készít egy szkriptet, mely belekerül a főkönyvtárba a csatorna nevével kezdődő almappába. Ha nincs olyan mappa akkor azt is létrehozza. S ez a szkript fut le akkor, amikor szükség van rá. Ezt hívja meg a CRON.

Ebben mindössze annyi van, hogy éppen mennyi az idő a felvétel kezdetekor, mert ez az idő lesz a készülő mpeg.ts dump neve. Meddig tartson a felvétel. S mivel a CRON dolgok általában periódikusak, az idő igenis lényeges, mert a szkript megnöveli egy nappal ezt az időt, hogy a wakealarm a következő napon is bekapcsolja a gépet 5 perccel előbb.

S persze bejegyzés is készül az at vagy cron időzítőkbe. Mert különben hogy futnának le a szkriptek? Az at-val nincs gond, mert az megszűnik amint végzett.
De ha a sorozatnak vége, akkor letörlöm a felvételért felelő szkriptet. De a CRON bejegyzés megmarad.

Egyetértek STP hozzászólásával: "Beütemezel egy darab scriptet a crontab-ban, az meg..."
Percenként elindul, és egy saját fájlban adminisztrált paramétereknek megfelelően futtat, amit kell, és amikor kell.

--
eutlantis

Biztos, hogy nem lehet ezt egy(!) darab, jól paraméterezhető, és jól paraméterezett scripttel megcsinálni?
Ne haragudj, de nekem a scriptet fialó script egy kicsit furcsa...

Vagy győzz meg, hogy ezt csak így lehet :)

---
"A megoldásra kell koncentrálni nem a problémára."

Ha gondolod, szívesem elküldöm az egészet, hogy átnézd, és javaslatokat tegyél.
Biztos hogy van jobb megoldás is. Én ezt tudtam kihozni. Így is sokat tanultam belőle.

Ha gondolod küldheted.
De csak hobbiból nézem meg, ha nagyon unatkozom.
Nem ígérek semmit. :)

---
"A megoldásra kell koncentrálni nem a problémára."

Miert nem egy ciklussal hozol letre at esemenyeket?

Ezt kifejtenéd? Engem mindig lecsesztek itt, hogy túl szűkszavú voltam.

at időpont record ezmegez

ciklus amíg
létrehoz AT esemény minden egyes részhez
ciklus vége

Így nem kell semmit sem törölnöd.

Húú. S ezt mégis hogy kivitelezzem. Mondjuk egy 8 évados sorozat esetén?

Ötletem lenne, de nem tudom mire vagy képes.

(Én alapból sql-ben tárolnám mit akarok felvenni és onnan olvasnám ki.)

Váááó. Akár egyből a port.hu-ról is le lehetne szedni az infót. :) Ott az xmltv.

De hogy mit akarok felvenni azt tudom. Hogy mikor induljon a script, a mostani megoldásommal szintén tudom, de ezek szerint ez a megoldás sokak szerint nem jó. Holott személyes crontabom van a cronie szerint. S nem a rendszer crontabját cseszegetem. Vagy rosszul értelmezem a dolgokat?
Éppen az egyszerűségre hajtanék. De egy sql adatbázis létrehozása nem valószínű hogy egyszerű lenne. Erre vannak nagy frontendek.
tvheadend, mythtv, Me tv, vdr, vlc. De ezeket kilőttem a problémás kezelésük miatt.

Most arra kértem segítséget hogy miként tudnám kiszedni egy szöveges fájlból a már feleslegessé váló sorokat. A felesleges sorok úgy képződnek hogy már nincs meg a fájl amit meghívnak. Ennyi.

**********
Ha valaki komolyabb dolgot szeretne, vagy másképp állna hozzá, hát rajta. Senki nem tartja vissza. Én egyelőre csak a bash-hoz értek egy hangyafejnyit. Volt egy ötletem amit megpróbáltam kivitelezni. S eddig működik is. Csak fejleszteném további lehetőségekkel. Ha elkészült a tákolmány, közzéteszem aztán lehet ócsárolni, hogy milyen szar megoldások vannak benne. De ki is lehet javítani az ócsárlás helyett.
Úgy tudom így készülnek a programok. Én ezt tudom, te azt tudod... Te azt teszed hozzá, én meg ezt.
... nagyon apró betűvel írom: de nem Magyarországon.

Félreértés ne essék! Ezt most nem neked írom, csak úgy a meglátásaimat írtam le. Mert így reagálnak általában az emberek a másik munkájára. Tudom tapasztalatból.

De én nem szólom le hogy sz@r a vlc mert nem akarja beolvasni a csatornalistát, de még a Média/Felvevő eszköz megnyitása lehetőségnél is elszáll Linuxon, holott pontosan azt írom be mint a Windowsos verziójában. Ott meg működik.
Csak annyit mondok, hogy emiatt a problémája miatt ez nekem nem felel meg.
************

Summa summarum maradjunk az eredeti kérésnél. Ha valaki máshogy oldaná meg, semmi akadálya.

Beütemezel egy darab scriptet a crontab-ban, az meg menedzseli az összes többi vackodat.
Ne baszogasd a crotab-ot feleslegesen!

+1000 :)

---
"A megoldásra kell koncentrálni nem a problémára."

Most nézegetem a neten a dolgokat. Persze ki kell próbálnom. De jól értem-e, ha nem a crontab-ba írom, hanem egy-egy fájlba a cron bejegyzéseket, és azt az /etc/cron.d mappába teszem, akkor az ugyanaz?
Illetve mi legyen a fájl neve? Tökmindegy?
Több időpontot is lehet beletenni több fájllal, vagy egy fájlt kell mindig bővíteni? S ugyanaz a szintaxis mint a crontab -e esetében?
De állítólag a cron démon ezt az /etc/cron.d mappát eleve figyeli.
man cron.d-t nem találok.

Oké. Azt már kitapasztaltam, hogyha az /etc/crontab állományba beírok egy ilyen sort.

* * * * * nextra nice -n 19 run-parts --report /etc/cron.d

(Igazából ezzel az erővel létre is hozhatnék egy cron.minute mappát. A lényeg az, hogy az /etc/crontab-ban hogy adom meg? De akkor az nem lesz szabvány.)

Akkor az percenként figyeli a cron.d mappát, és az abban lévő szkripteket percenként lefuttatja. S az elkészült állomány az én jogosultságaimat örökli. De felhasználóként hogy rakom ide bele a fájlokat? Vagy innen egy mappát figyelek, amit teljes joggal írhatok?

Ez eddig szép és jó, de még nem értem hogy lesz ebből PONT AKKOR felvétel?
Ez alapján minden elkészülő szkriptbe kell egy aktuális idő és a felvenni kívánt időpontot összehasonlító rutin?
Némiképp bonyolítja a dolgot, meg egyszerűsíti is a CRON szempontjából.

Debian alapú rendszerekben erre nincs szükség a crontab-ban:
* * * * * nextra nice -n 19 run-parts --report /etc/cron.d

A cron.d-be crontab-fájlokat kell tenni. Szerintem, ha van egy ilyen scripted, CRON_1515083934.sh, ami elvégzi a "munkát", akkor a cron.d-be be lehetne tenni egy ilyen fájlt, CRON_1515083934, amibe ez lehetne:
* * * * * nextra $HOME/főkönyvtár/alkönyvtár/CRON_1515083934.sh >> $HOME/tvlog 2>&1
A *-ok helyére persze a megfelelő indítási időpontot kell írni.
Ekkor minden scriptednek pontosan egy állomány felelne meg a cron.d-ben.

--
eutlantis

Kipróbáltam, de ez nálam nem működik. Mageiát használok, mely Red Hat alapú.
Ez a hibaüzenet:
etc/cron.d/amc_CRON_u1515531510:
run-parts: failed to exec /etc/cron.d/amc_CRON_u1515531510: Exec format error
run-parts: /etc/cron.d/amc_CRON_u1515531510 exited with return code 1

Ide csak futtatható állományokat tehetek. De akkor az (jelen esetben) percenként lefut. Adott időben való futását nem tudom hogy oldjam meg.

Most olvasom hogy a az én rendszerem cronie-t használ. Mely a Vixie-cron Fedora általi forkja.
Vixie-cron
A Vixie-cron teljes értékű cron implementáció a SysV cron segítségével. Minden felhasználónak saját crontabja van, és megengedett a környezeti változók azonosítása a crontabon belül. A többi cron variánssal ellentétben az SELinux és a PAM-ot is támogatja. Kevesebb architektúrát támogat, mint a Dcron, de többet mint az Fcron.

A sys-process / vixie-cron jellemzői:

A SELinux támogatása;
A PAM ( /etc/security/limits.conf ) támogatása;
Környezeti változók beállítása időben (PATH, SHELL, HOME, stb.);
Minden felhasználónak lehet egy személyes crontabja. A hozzáférést a cron.allow és a cron.deny vezérli

A cronie ugyanezt tudja, + anacron-implementációval rendelkezik.

Ha így nézem a dolgokat akkor amit én a crontab -e -vel szerkesztgetek, mert ide kerülnek a cuccaim, az teljesen jó.
S az eredeti kérdés pont erre irányult hogy ebből hogyan veszem ki a már szükségtelen bejegyzéseket.
Lehet hogy valami félreértés volt?

Milyen kedves. Számomra ezek nem vackok. Sokat dolgoztam velük.

Jelenleg működik. S számomra a cél szentesíti az eszközt.
S jó párszor említettem hogy nem vagyok programozó. Ezért vannak kérdéseim.

+1

En (a Debianomon) run-parts-tol indulnek.

Pont erre valo, ami ott a konyvtarban, azt vegrehajtja.

Nekem Mageia van feltelepítve. Ebben az esetben egy "várakozó" mappát kell létrehoznom és a megfelelő időben áttolni az sh-t?

Van erre beepitett opcio. A cron.d konyvtarba erdemes igeny szerint betenni az idozitest. Lehet 1-1 file vagy egy file mindenhez es ujrageneralsz.

ÁÁáá ezt csak most olvasom miután posztoltam az előzőt.

Én megnézném tudok-e használni anacront.
Bár ez meg kb. ugyanaz mint amit már fent mondtak, hogy crontab ami manageli az egészet.

Az anacron nem erre való. A leírás szerint az elmaradt dolgokat hajtja végre. Például ki van írva egy rendszerellenőrzés, 6 30-ra, de a gép nincs bekapcsolva, vagy időközben kikapcsolásra került, akkor a következő alkalmas (szabad cpu) időben, de még aznap elvégzi a feladatot.
De döntöttem. Marad minden úgy ahogy van. a cronie személyes crontab-ot ajánl fel személyes használatra, amit úgy cseszegetek ahogy akarok. Ennyi. Ez való erre akárki akármit mond. Ez Red Hat alapú rendszer és itt így van megvalósítva.

Nem százával készülnek a bejegyzések, mivel a sorozatok sem naponta végződnek. Egy-egy bejegyzés akár fél évig is ott maradhat.
S persze elfelejtődhet. De a dumpstreamet készítő szkript ott figyel a mappában. Az törlésre kerül, ha vége a sorozatnak.

S hogy ekkor ne manuálisan kézzel kelljen crontab -e vel kiszednem a bejegyzést, szeretnék erre egy ezt figyelő szkriptet fabrikálni.
Az adatokat simán kimásolom crontab -l > szöveges fájlba, kiszedem belőle ami nem kell, és visszaírom. Ez olyan hatalmas és megbocsáthatatlan eljárás? www.youtube.com/watch?v=UlVqobmcPuM
Tényleg marhára nem értem mi ezzel a probléma? Most ne azt nézzük hogy ki hogyan csinálná, hanem azt, hogy ez hazavágja az egész rendszert? Ez az atomfegyver esete a szúnyogra? Vagy mi a ...bánat?
S itt be is fejezem a topicot.

Csak kérdezem...

Nem lenne egyszerűbb, hogy az a program, ami keletkezteti, illetve törli a fájlokat, az frissítse a fájl alapú nyilvántartást (ha jól értem, crontab file-t) is?

Ha nem megoldható, akkor nem lenne egyszerűbb egy jól elhelyezett find paranccsal listát kérni és abból legyártani a crontab file-t?

Ha marad az eredeti megoldás, akkor ott is lehet olyan mókát játszani, hogy az eredeti állomány egy teljes sorát beolvasni, kivenni azt az elemet, ami a fájlnév, megvizsgálni, hogy létezik-e a fájl és ha igen, akkor a teljes sort kiírni egy munkaállományba - a folyamat végén pedig az eredeti állomány törölhető, a munkaállomány meg átnevezhető az eredeti állomány nevére, ezzel máris megszabadultál a törölt állományoktól. Az új állományok felvétele meg történhetne úgy, hogy egy find paranccsal előveszed az összes állományt, ami kell, majd ezt a listát egyesével feldolgozod: a kérdéses állomány szerepel a listában? Ha nem, akkor a lista bővítendő, így az újak is bekerülnének a nyilvántartásba.

No. Kapiskálod. Egy fájlról beszélünk mely létrejött, és a felvételért felel. Ez valahol van a gépen. Ezt az állományt kézzel letörlöm, ha már nincs rá szükség. Vége a sorozatnak.
S van egy bejegyzés a crontab időzítőben, ami ezt a fájlt meghívja. S emiatt fut le akkor amikor kell.

De ha a fájl hiányzik, a crontab akkor is működik de nem fog csinálni semmit, csak teleszemeteli a postaládát hogy nincs ilyen fájl.
Ekkor amikor észreveszem, manuálisan crontab -e vel megnyitom a személyes crontabomat, és kitörlöm azt a sort, mely ezt a hiányzó fájlt keresi.

Nos arra vetemedtem, hogy ezt ne én csináljam, hanem egy rutin. S itt akadtam el.
A crontabot ki lehet listázni a crontab -l paranccsal. Ezt átirányitom egy szöveges fájlba, és lehet vele dolgozni.
Ilyen bejegyzés van benne

# Tv sorozat - Prime - Minden hétköznap - 11:57 perckor
57 11 * * 1-5 /mnt/egyebek/Videos/dvb-c/Prime/Prime_CRON_u1515062712.sh

Ezt nem is én írom bele, hanem az a szkript, mely a Prime_CRON_u1515062712.sh fájlt is elkészíti.

Nos ezt a két sort kell kitörölnöm ha már nincs meg a Prime_CRON_u1515062712.sh állomány.

Kész scriptről nem tudok, viszont amit fentebb írtam, az működhet.
Vázlat szinten a megoldás: soronként dolgozod fel. Ha a sor '#' jellel kezdődik, akkor a sort csak megjegyzed (írhatod mondjuk a /tmp/$$.rem állományba), ha nem így kezdődik, akkor előveszed (awk print) a fájlnevet és ellenőrzöd, hogy létezik-e? Ha létezik, akkor a korábbi megjegyzés sorokat és az aktuális adatsort kiírod egy másik átmeneti állományba (pl. /tmp/$$.ncron), ha nem létezik, akkor ez a sor kimarad. Nem megjegyzés sor feldolgozásának utolsó lépése mindenképpen az legyen, hogy a korábban megjegyzett megjegyzéssorokat törlöd! Amikor az eredeti állomány feldolgozása befejeződött, akkor a másik átmeneti állományba előállt az új tartalom, amelyből a korábban törölt fájlok kihagyásra kerültek.
Elméletileg ennyi - de persze ezt meg kell írni, a scriptet le kell tesztelni, a talált hibákat ki kell javítani. :-)

Odáig jutottam, hogy végül is megvan hogy mit kell kitörölni. Azt a sort vagy sorokat, melyek a result-ban találhatóak.
Sed-del ki is tudom majd törölni,
A crontab tartalmát már kidumpoltam és azzal a szöveges fájllal kísérletezem.


path="/mnt/egyebek/Videos/dvb-c"
file_list="cron_tartalom"
cat ${file_list} | awk -vFS="/" '{print $7}' | sed -e '/^$/d' | sort > cron-data-files
find ${path} -name *.sh | awk -vFS="/" '{print $7}' | sort > sh-files
grep -Fxvf sh-files cron-data-files > result

Nos ez okés, de a konkrét sor előtti sort hogy törlöm ki?
# Tv sorozat - Viasat Explore - Minden hétköznap - 8.30 perckor

szerkesztve:
Jóval később megoldottam ezt is.
awk 'NR==FNR{if (/Viasat Explore_CRON_u1515083934.sh/) del[NR-1];next} !(FNR in del)' cron_tartalom cron_tartalom

Mondhatom hogy megoldottam... magamtól. Mert példákat senki nem írt, s csak egy ajánlást kaptam ami számomra értelmezhető is volt.

Azt azért ne feledd, hogy az eredeti felállás egy teljesen egyedi fejlesztés, nálad van, senki másnál. Te ehhez keresel egy megoldást. Ahhoz, hogy script írás szinten lehessen segíteni, ezt a környezetet kéne a létre hozni máshol is. Neked nem bonyolult, mert te csináltad, az utolsó bitjét is ismered. Másnak nem feltétlenül ennyire egyértelmű.
Egyébként meg:
- ötletet kaptál, ami alapján el tudtál indulni
- sikerült is megoldani a feladatot - ezáltal tanultál, fejlődtél és nem utolsó sorban van egy működő megoldásod a problémára :-)
- fogalmazzuk udvariasan úgy, hogy totál máshogy oldottad meg, mint amit javasoltam. Ez nem probléma, hiszen tudjuk, hogy a hegyre sok út vezet fel, de a csúcsról a kilátás ugyanaz. A te megoldásod nekem azért szép, mert ebben meg én találtam újat, tehát én is tanultam belőle

Talán fejlődtem, de most megint elakadtam. Az ideiglenes fájlok helyett tömbökbe raktam az eredményeket.

# sh fájlnevek a mappákból (De az .sh véget lecsíptem, mert csak zavarokat okozott.)
readarray Array1 <<< "$(find ${path} -name *.sh | awk -vFS="/" '{print $7}' | awk -vFS=".sh" '{print $1}' | sort)"
echo "${Array1[@]}"

Prime_CRON_u1515062712

# fájlnevek a cronból
readarray Array2 <<< "$(cat ${cron_data} | awk -vFS="/" '{print $7}' | sed -e '/^$/d' | awk -vFS=".sh" '{print $1}' | sort)"
echo "${Array2[@]}"

amc_CRON_u1515531510
Prime_CRON_u1515062712
Viasat Explore_CRON_u1515083934

Most a tömböket kéne összehasonlítanom, és kiválasztani hogy mit kell majd letörölni.
Vagyis Array2-Array1

Jelen esetben nem kell a(z)
amc_CRON_u1515531510
Viasat Explore_CRON_u1515083934
Ezt hogyan kivonatoljam?

echo ${Array2[@]} ${Array1[@]} | tr ' ' '\n' | sort | uniq -D | uniq

Ez nem egészen jó. Mert itt pont azt kapom, amit meg kell hagyni. Egy 3. tömbbe raknám a szükségtelen dolgokat.
S majd annak segítségével végezném a törlést.

szerkesztve:
Ha az egész elejére beillesztek egy IFS=``-t
és
echo ${Array2[@]} ${Array1[@]} | sort | uniq -u A @ helyett * van de akkor a hup nem mutatja jól.
Akkor van egy extra szóközöm, amivel egyelőre nem tudom mit kezdeni.

amc_CRON_u1515531510
Viasat Explore_CRON_u1515083934

A Viasat előtt van egy space. Emiatt amikor sed-elni szeretném, eldobja magát.

Nem teljesen értem, miért bántja a sed lelkét, ha egy sor szóközzel kezdődik. Mi a baja vele?
Ha a kifejezés lesz rossz miatta, akkor az is lehet opció, hogy egy külön sed csak a sor eleji szóközöket kigyomlálja.

miért kiabálsz bizonyos szavakat a bejegyzésben? :)

Úgy gondolod zavaró a főkönyvtár így kiemelve? Igazad van előbb is eszembe juthatott volna ez a fajta kiemelés. Vagy inkább a piros kiemelés.
De a [ ] és < > jeleket rendesen lehet keverni. Majd észben tartom.

nem a kiemelés mikéntjét, hanem a szükségességét nem értem. Szerintem működne a kiírás úgy is, ha szimplán leírod kisbetűkkel a szóban forgó szavakat :)

incrontab?

Nekem ilyenem nincs. Az urpmq -i incron-ra azt írja hogy ezt fájlrendszeri események vezérlik és nem időintervallumok.
Ez nem jó.

" Ha letörlöm a már szükségtelenné vált sh állományt, szeretném ha automatikusan törlődne a CRONTAB-ból is az őt futtató bejegyzés."
ez ugy hangzik mint egy fajlrendszeri esemeny, ami triggerel egy torlest a crontabbol.

Van erre valami példád is. Ezt abszolúte nem ismerem.
Elolvastam a man-ját a neten, de ebből számomra nem derül ki, hogy hogyan törli a crontab-ból a bejegyzést? Vagy a jelenlegi crontab helyett kéne használni? Nem bonyolítanám.
https://www.systutorials.com/docs/linux/man/5-incrontab/

Én sem ismerem, de elolvastam a manualt, annak alapján azért sejtem, mire jó. Pont ezért tudom azt mondani, hogy - bár maga az ötlet remek, de - neked akkor sem jó ez a megoldás. Az incrond képes egy könyvtár figyelésére, de az alkönyvtárai nélkül. Amíg azt írod, hogy a főkönyvtáron belül előre nem tudható mennyiségű- és nevű alkönyvtár jöhet létre, addig ez az irány rossz, mert minden egyes alkönyvtárhoz újabb incrond bejegyzés kellene generálni. Ha ez elmarad, akkor az incrond az alkönyvtárak változásait nem kezeli le - ha nem marad el, akkor azt ki és mikor tartja karban?

Mondjuk ha nagyon durvák akarunk lenni, akkor az egy opció lehet, hogy a főkönyvtárat figyelve ha új alkönyvtár jön létre, akkor az incrond-vel módosíttatjuk a saját konfigját, hogy mostantól a saját alkönyvtárát is figyelje, illetve ha nem akarjuk a végtelenségig növelni a bejegyzések számát, akkor alkönyvtár törlését is hasonlóan kezeljük, csak akkor nem bővítjük az incrond konfigurációját, hanem kivesszük a megszűnt könyvtárhoz tartozó sort. Ezen a ponton viszont a feladat kezd bonyolultabb lenni, mint az eredeti kérdésre adható válasz...

subdireket is figyeli.

Nem próbáltam, de a man-ban lévő sample alapján nem figyeli.
Marad az egyértelmű megoldás: ki kell próbálni! :-)

megoldas a problemadra, de nem a kerdesre:

A helyedzetedben szerintem a legegyszerubb megoldas az lenne, ha idonkent (pl. naponta egyszer) ujra generalnad a specko filmes crontab file-od amiben ugye nincs mas. A generalashoz a configot a cron file-aid elso 2 soraba raknam be kommentben azok keszitesekor.

find DIR -name "CRON_*.sh" -type f -exec head -2 {} \; | cut -b 2- > NEWCRON

Fejbol irtam ne eles adatokon teszteld!