ha bash -x ./script.sh előtaggal futtatod, akkor látjuk, milyen értéket vesz fel, próbáld úgy
Gyorskeresés
Legfrissebb anyagok
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
Általános témák
LOGOUT.hu témák
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sh4d0w:] Rebel Moon - Ne nézd meg!
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [proci985:] Audyssey szobakalibráció felülvezérlése REW + mérőmikrofonnal
- [Re:] [Mr. Y:] Curve kártyával vigyázz tankolásnál!
- [Re:] [bambano:] Bambanő háza tája
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Luck Dragon:] MárkaLánc
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- [Re:] [gban:] Ingyen kellene, de tegnapra
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Hozzászólások
Keem1
addikt
++ hostname
+ devicename=pistacio
+ path_backup=/media/hdd/backup
+ file_archive=pistacio.local.tar.gz
+ path_archive=/media/hdd/backup/pistacio.local.tar.gz
+ [[ ! -d /media/hdd/backup ]]
+ [[ -f /media/hdd/backup/pistacio.local.tar.gz ]]
+ rm -f /media/hdd/backup/pistacio.local.tar.gz
+ [[ -f '' ]]
+ directories=("/home/juliska/")
+ declare -a directories
+ excludes=("home/juliska/tmp")
+ declare -a excludes
++ printf '%s\n' /home/juliska/
+ dirlist=/home/juliska/
++ printf -- '--exclude='\''%s'\'' ' home/juliska/tmp
+ exclist='--exclude='\''home/juliska/tmp'\'' '
+ tar -cvf /media/hdd/backup/pistacio.local.tar.gz '--exclude='\''home/juliska/tmp'\''' /home/juliska/
tar: A kezdő „/” eltávolítása a nevek elejéről
/home/juliska/
/home/juliska/.bash_history
/home/juliska/samsung_860evo_250gb_01.png
/home/juliska/samsung_860evo_250gb_02.png
/home/juliska/samsung_860evo_250gb_03.png
/home/juliska/.bash_logout
/home/juliska/tmp/
/home/juliska/tmp/teszt.txt
/home/juliska/tmp/addon.xml
/home/juliska/tmp/131927106_711033053173709_564839630427467469_n_711033049840376.jpg
/home/juliska/tmp/20210117_201722.jpg
/home/juliska/backup.sh
/home/juliska/.profile
/home/juliska/.bashrc
[ Szerkesztve ]
KrAt
veterán
+ excludes=("home/juliska/tmp")
tar parancsban '--exclude='\''home/juliska/tmp'\'''
Ez nekem nem tetszik
[ Szerkesztve ]
a printf-nél szerintem felesleges az aposztróf, az idézőjel meg az eszképelés.
szerintem
printf '--exclude %s' home/juliska/tmp
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Keem1
addikt
Sajnos úgy se megy Viszont így kicsit necces, ha később kerül be olyan folder, aminek a nevében space van.
juliska@pistacio:~ $ bash -x ./backup.sh
++ hostname
+ devicename=pistacio
+ path_backup=/media/hdd/backup
+ file_archive=pistacio.local.tar.gz
+ path_archive=/media/hdd/backup/pistacio.local.tar.gz
+ [[ ! -d /media/hdd/backup ]]
+ [[ -f /media/hdd/backup/pistacio.local.tar.gz ]]
+ rm -f /media/hdd/backup/pistacio.local.tar.gz
+ [[ -f '' ]]
+ directories=("/home/juliska/")
+ declare -a directories
+ excludes=("home/juliska/tmp")
+ declare -a excludes
++ printf '%s\n' /home/juliska/
+ dirlist=/home/juliska/
++ printf --exclude=%s home/juliska/tmp
./backup.sh: 32. sor: printf: --: érvénytelen kapcsoló
printf: használat: printf [-v változó] formátum [argumentumok]
+ exclist=
+ tar -cvf /media/hdd/backup/pistacio.local.tar.gz /home/juliska/
tar: A kezdő „/” eltávolítása a nevek elejéről
/home/juliska/
/home/juliska/.bash_history
/home/juliska/samsung_860evo_250gb_01.png
/home/juliska/samsung_860evo_250gb_02.png
/home/juliska/samsung_860evo_250gb_03.png
/home/juliska/.bash_logout
/home/juliska/tmp/
/home/juliska/tmp/teszt.txt
/home/juliska/tmp/addon.xml
/home/juliska/tmp/131927106_711033053173709_564839630427467469_n_711033049840376.jpg
/home/juliska/tmp/20210117_201722.jpg
/home/juliska/backup.sh
/home/juliska/.profile
/home/juliska/.bashrc
juliska@pistacio:~ $
mert kimaradt a printf-ből a --, ezért nem rakta bele az exclude listet.
azt még egy kicsit agyalnom kell, hogy mikor melyik expansion zajlik le...
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Keem1
addikt
Így jó
exclist=$(printf -- "--exclude=%s\n" "${excludes[@]}")
Ez most remekül működik, igaz, azonnal bukom az egészet, ha bekerül egy space-t tartalmazó path, de egyelőre ilyenem nincs.
Köszönöm srácok a segítséget és a türelmet
azt majd beírod kérdőjellel.
ez?egy?space?pelda
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Fecogame
veterán
Szeretnék létrehozni egy olyan (valószínűleg) tömböt, ami x számú elemet tartalmazhat, és ha a limiten felül hozzáadok egy újat, akkor a a legrégebben hozzáadott kiesik belőle.
Létezik ilyen? Ha igen, mi a neve?
Példa 3 tagú tömbre:
Ujelem1
Ujelem2
Ujelem3
Majd ha hozzáadom az Ujelem4-et, és így nézne ki:
Ujelem2
Ujelem3
Ujelem4
Most egy fájlba irányítom ezeket az elemeket és onnan szűrök rá tail-el, de rendkívül lassú módszer így.
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
dabadab
titán
Nincs ilyen, kézzel lehet szabályozgatni a tömböt:
#!/bin/bash
declare -a ARR
MAXLEN=4
function add_element()
{
ARR+=("$1")
len=${#ARR[@]}
if [ $len -gt $MAXLEN ] ; then
local -a tmp_arr
local i=$((len-$MAXLEN))
while [ $i -lt $len ] ; do
tmp_arr+=(${ARR[$i]})
let i++
done
ARR=(${tmp_arr[@]})
fi
}
for x in $(seq 8) ; do
add_element $x
echo ${ARR[@]}
done
DRM is theft
Fecogame
veterán
Köszi, működik! Mindenesetre furcsa, hogy alapból a shell-ben nincs ilyen funkció.
[ Szerkesztve ]
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
_kovi_
aktív tag
Sziasztok!
Ez lenne a kérdésem, hogy másik topicban kolléga említette, hogy a fordított aposztróf idejétmúlt, mert a processzbehelyettesítés régi módszere a fordított aposztróf volt, az új pedig a $( ).
Tehát a fordított aposztrófban egy parancsot lehetett futtatni egyben?
Köszi
Fecogame
veterán
Egy kis magyarázat erre
Egyébként van egy remek tool, ShellCheck, online megnézhető mit lehet javítani a kódban
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
_kovi_
aktív tag
Köszi!
Véreshurka
senior tag
Sziasztok!
Szeretnék egy olyan script-et készíteni, ami belép egy adott mappába, ott ellenőrzi, hogy megvannak-e bizonyos könyvtárak (egy eredeti, és egy .bac formátumba mentett), majd ezeket rsync-el szinkronizálja. Azt megtaláltam, hogy az eredetit a .bac formátumos mentéssel hogyan tudom megcsinálni, de mivel sosem csináltam még ilyet ott elakadtam, hogy hogyan kellene ennek kinéznie ha több könyvtárat szeretnék szinkronizálni, ebben kérném a segítségeteket.
Így nézne ki a könyvtárszerkezet ha ls-el listázom:
ls mappa/mappa1/mappa2/
mappa3
mappa3.bac
mappa4
mappa4.bac
mappa5
mappa5.bac
És így nézne ki a script ha egy mappát kszinkronizálnék:
#!/bin/sh
cd /mappa/mappa1/mappa2
if test -d mappa3;then
if test -d mappa3.bac;then
rsync -a --delete mappa3/ mappa3.bac/
fi;fi
Ezt szeretném kiegészíteni a többi mappával is. Gondolom amikor megnézetem vele, hogy megvannak-e a mappák, azt csak simán beteszem a script-be, mint a mappa3-nál, de nem tudom mit kellene az első rsync-es sor után tennem, hogy a többi mappát is ugyanúgy leszinkronizálja. Ott is a ;then-t kellene használnom? Valahogy így?
#!/bin/sh
cd /mappa/mappa1/mappa2
if test -d mappa3;then
if test -d mappa3.bac;then
if test -d mappa4;then
if test -d mappa4.bac;then
if test -d mappa5;then
if test -d mappa5.bac;then
rsync -a --delete mappa3/ mappa3.bac/;then
rsync -a --delete mappa4/ mappa4.bac/;then
rsync -a --delete mappa5/ mappa5.bac/
fi;fi
Előre is köszönöm a segtséget!
El Psy Kongroo
lev258
veterán
Az rsync-hez nem igazán értek, de jelenleg az if használatod jobban zavar. Logikailag nem értem a dolgot.
Ubuntu MATE 20.04, hobbi cayenne termesztő
Véreshurka
senior tag
Én az egészhez nem értek . Tulajdonképpen a firefox profil mappáimat szeretném a tmpfs-be helyezni és az lenne a cél, hogy a mentett mappák tartalmát mindig visszamásolja az eredeti profil mappába egy újraindítás után. Ebből a script-ből készítenék majd egy systemd service-t ami minden újraindítás után lefutna a háttérben. Egy mappával egyébként működik a dolog, kipróbáltam egy futtatással miután létrehoztam a scriptet és változott a profil mappa módosítási dátuma, szóval gondolom végrehajtódott a feladat. De mivel több profilt is használok firefox alatt így nem szeretnék minden egyes profil szimkronizációhoz külön service-t készíteni hanem egy service-be belerakni az egészet, a későbiekben pedig ha bővülnének a profiljaim akkor csak a scriptet kellene bővítenem. Innen vettem az ötletet és a script-et: [link]
El Psy Kongroo
kb. ezt kellene:
for i in mappa3 mappa4 mappa5; do
[ test -d $i ] && [ test -d "${i}.bac" ] && rsync -a --delete $i "${i}.bac"
done
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
lev258
veterán
Először is, minden if-hez tartozik egy fi. Ez zárja le. Ha egymás után több if van, illetve a végén több fi, akkor az egybeágyazást jelent, vagyis a legbelső if többszörös feltételrendszernek kell, hogy megfeleljen.
Javaslom, hogy kezdd a shell script-ek if használatának megismerésével. Utána az rsync rész már könnyű lesz.
Ubuntu MATE 20.04, hobbi cayenne termesztő
Véreshurka
senior tag
Tudsz ajánlani kezdőknek szóló oldalt a script-ekről?
El Psy Kongroo
Véreshurka
senior tag
Köszönöm!
Csak hogy világos legyen számomra:
a for i
kezdéssel határozod meg hogy a ${i}
jelentse az összes in
utáni mappát? Ha igen akkor mndig csak ki kell egészítenem az in
utáni részt azokkal a mappákkal amiket még szeretnék szinkronizáltatni? Illetve gondolom ugyanúgy az elejére kell tennem, hogy belépjen a mappákat tartalmazó szülőmappába? Tehát így nézne ki:
#!/bin/sh
cd /mappa/mappa1/mappa2
for i in mappa3 mappa4 mappa5; do
[ test -d $i ] && [ test -d "${i}.bac" ] && rsync -a --delete $i "${i}.bac"
done
El Psy Kongroo
dabadab
titán
Szerintem te nem ezt akarod
Ez csak akkor szinkronizálja bármelyik könyvtárat is, ha az összes ott van meg a .bac párja is - én azt gondolnám, hogy igazából az lenne a kívánt működés, hogy ha ott van egy könyvtár meg .bac párja, akkor azt szinkronizálja, függetlenül a többi könyvtártól.
Ennek szellemében:
function do_backup()
{
for DIR in "$@" ; do
BAC="$DIR.bac"
if [ -d "$DIR" ] && [ -d "$BAC" ] ; then
rsync -a --delete "$DIR" "$BAC"
fi
done
}
DIRS=("foo" "bar" "foo bar")
do_backup "${DIRS[@]}"
do_backup "foo" "bar" "foo bar"
do_backup /backup/dirs/*
A három do_backup csak szemléltetésnek van (az első egy arrayban tárolja a szinkronizálandó könyvtárak neveit, a második simán felsorolja, a harmadik meg az adott helyen lévő könyvtárakat használja)
[ Szerkesztve ]
DRM is theft
Véreshurka
senior tag
Köszi neked is!
Úgy látom egyelőre maradok annál, hogy egyesével létrehozok egy-egy service fájlt aztán majd kicsit belenézek a script írásba, mert most már végképp bennt vagyok az erdőben...
El Psy Kongroo
Sonja
veterán
Ubuntu alatt használtam ezt a scriptet, minden probléma nélkül:
find . -maxdepth 1 -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" | xargs -l -i convert -resize 1000x1000\> {} folder.jpg
Most viszont Arch alatt feldob egy ilyen warningot (gondolom, mert újabb verzió a xargs):
xargs: warning: options --max-lines and --replace/-I/-i are mutually exclusive, ignoring previous --max-lines value
Persze így is működik a script, de zavar ez a warning kiírás. Mit kellene tennem, hogy ez ne legyen?
Ha csalódni akarsz, bízz az emberekben!
dabadab
titán
Azt, amit mond: vedd ki az xargs mögül a -l-t, mert az nem csinál semmit.
DRM is theft
_kovi_
aktív tag
Sziasztok!
Fájlnévre illeszkedést milyen paranccsal tudom vizsgálni egy scriptben?
AWK? SED ?
Köszi!
Sonja
veterán
Köszi!
Ha csalódni akarsz, bízz az emberekben!
Jester01
veterán
Milyen illeszkedést? Shell pattern glob? Milyen shell?
bash esetén [[ és = operátor. Például:
$ [[ "file1.txt" = f*.txt ]] && echo YES || echo NO
YES
$ [[ "file1.jpg" = f*.txt ]] && echo YES || echo NO
NO
Jester
_kovi_
aktív tag
Bash script.
Most kicsit csúnyán van a fájl kiválasztása, mert adott egy gép ami 4 féle "kiterjesztésű" fájlt ad minden nap végén, de ebből csak az egyik kell nekem. A fájl eleje megegyezik.
Pl.: 1234567.ser , 1234567.tpl , 1234567.chz.tic , 1234567.gpw
Nekem csak a gpw fájlt kellene átmásolnom ami csak azon napon keletkezett. Ez egy windows megosztáson van amit felcsatolok egy mappába a linux szerveren. S onnan másolnék.
Ez a megoldás kicsit csúnya:gpwfile=$(ls -l --time-style=+%F | grep $(date +%F) | grep -v ".ser" | grep -v ".tpl" | grep -v ".chz.tic" | cut -d" "-f8)
Olyan illeszkedésre gondoltam ami megmondja, hogy a .gwz "végű" fájlt másold át ami aznap keletkezett..
[ Szerkesztve ]
gpwfile=$(date '+%F.gwz')
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
dabadab
titán
find /windows_share/ -type f -ctime -1 -iname '*gzw' -exec cp {} /linux_dir/ \;
Balról jobbra olvasva: megkeresi a /windows_share könyvtárban azokat a sima file-okat (tehát könyvtárat, pipe-ot, egyéb speciális file-t nem fog visszaadni), amiket maximum 1*24 órával ezelőtt hoztak létre és (figyelmen kívül hagyva a kis/nagybetű különbségeket) a '*.gzw' wildcardra illeszkednek és végrehajt rajtuk egy másolást a /linux_dir/-be.
DRM is theft
az agyhalott windows userek kedvéért soha nem felejtkezünk el a szóközöket tartalmazó fájlnevekről...
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
dabadab
titán
A {} megoldja a különleges karaktereket problémáját. (És a szóköz (sőt, a \n, \t, \r, stb) teljesen legális karakter a filenevekben, nem kell hozzájuk se agyhalottnak, se windows usernek lenni)
DRM is theft
_kovi_
aktív tag
dabadab és bambano köszönöm mindkettőtöknek!
_kovi_
aktív tag
Egy kis ssegítséget kérnék, sziasztok!
files=$(find /home/butor/ -type f -ctime -1 -iname '*.jpg' | cut -d"/" -f6)
cd /home/butor/
for i in "${files[@]}"
do
echo $i
done
A files (tömb?)-ben kettő fájl van: fajl1.jpg fajl2.jpg
Szóközzel elválasztva.
Viszont a for nem kezeli külön, hanem egyben! kiírásnál az $i változóra: fajl1.jpg fajl2.jpg
Miért nem kezeli külön, hogy végigmegy az elemeken?
Köszi!
[ Szerkesztve ]
dabadab
titán
Mert nem tömb, hanem egy string, aminek az elemei hiába vannak space-szel elválasztva, mivel idézőjelek között van, ezért nem bontja fel több stringre, hanem egyetlenként kezeli.
Ha kiveszed az idézőjeleket a fornál (meg a tömbös kezelést, ami mondjuk a működésbe nem zavar be, csak felesleges és megtévesztően néz ki), akkor menni fog - feltéve, hogy nincsenek olyan file-jaid, amiknek a nevében space van.
DRM is theft
_kovi_
aktív tag
Bakker
Köszönöm!
mintha azt mondta volna itten egy szkript titán, hogy a space-es fájlnevekhez nem kell agyhalottnak lenni, mert tökre szabályos meg minden...
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
ezt nem akarod esetleg vagy megírni rendesen, vagy elmondani, hogy mi a cél, és akkor megírjuk rendesen?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
dabadab
titán
Az, és egy korrekten megírt scriptnek kezelnie is kellene, de nekem úgy tűnt, hogy itt az igény inkább az lenne, hogy gyorsan össze lehessen dobni valamit, ami működik.
DRM is theft
_kovi_
aktív tag
De megírom persze.
Az a cél, hogy egy gépen(Win7) 1 nap alatt létrejön 4db ugyanolyan fájlnevű de más kiterjesztésű fájl.
A célom az, hogy a script minden nap elmásolja ezt a fájlt. Ebből nekem csak a jpg kell.
Ez egy Win7 megosztáson van, amit felcsatolok Centos7 alá. Majd a scriptben sima cp.
A for azért kellett, mert néha lehet egy nap 2-3 fájl is. De én balga stringként akartam ugye kezelni egy tömböt...
oké, de például a cut -f 6 -d /
az messziről első ránézésre úgy néz ki, mintha egy olyan valaki akarná a könyvtárnevet levágni a fájlnévről, aki nem ismeri a basename
utasítást. ez nekem azt mutatja, hogy volna mit optimalizálni a történeten
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
_kovi_
aktív tag
Ti PROFIK vagytok, én még tanulom... De rajta vagyok...
_kovi_
aktív tag
Srácok, ha egy script lefut manuálisan, csak "apró" hibát dob vissza, hogy pl nincs ilyen könyvtár a move parancsnak(előtte már elmásolta).
Akkor lehet hogy nem futtatja meg a crontab?
Hol tudom megnézni, hogy a cron mit futtatott és sikeresen -e?
Köszönöm!
Headless
őstag
szia hiba kezelést neked kell beraknod.
alapvetően ha szintaktikai hiba nincs a scriptben és semmi hiba kezelés sincs általad, akkor minden lefut.
cron logolást tudsz beállítani, de ez specifikusabb, pl systemd esetében szerintem alapból lesz, de tényleg itt attól függ milyen op rendszer/indítást használ az eszköz.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
egyrészt a cron küld emailt a végeredményről.
másrészt a cron nem feltétlenül ugyanolyan környezetben futtatja a szkriptedet, mint login után. tehát lehet, hogy környezeti változó nincs beállítva.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
_kovi_
aktív tag
Valamiért nem fut meg a script..
CentOS7 a rendszer, mindent rootként csinálok. Tudom nem szabályos, de most ez így van.
Csak azért kérdeztem, mert az a gyanúm hogy ez a "warning" miatt nem fut meg?!...
Fecogame
veterán
- Van futtatási joga a scriptnek?
- Működik a cron?
- Tegyél be a scriptbe egy date >> /tmp/scriptem.log
részt, és meglátod tényleg lefut-e
- A cron-ról logot a /var/log/cron
vagy a /var/log/messages
fájlban találsz
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
Fecogame
veterán
Hogyan tudom egy stringről megállapítani, hogy tartalmaz-e a ponton és a 0-án kívül mást?
Konkrétabban van egy számom ( 0.000000
formátumban ), ami aztán lehet 0.534545
,6.3434
vagy 8
is. Azt szeretném megvizsgálni, hogy az értéke 0 vagy annál nagyobb.
Talán a legegyszerűbb megoldás a pontra és 0-ra szűrni, és ha mást is tartalmaz, akkor jelez. De lehet van még egyszerűbb megoldás is
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
most akkor melyiket akarod?
számnak tűnő stringre lehet regexp-pel szűrni
megnézni, hogy egy szám nagyobb-e, mint nulla, van test utasítás és -gt operátor.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Fecogame
veterán
Végü megoldottam összehasonlítással, csak floating numbert nem olyan egyszerű bash alatt
NULLASERTEK="0.000000"
NAGYOBBERTEK="0.534545"
[ $(bc <<< "$NULLASERTEK <= $NAGYOBBERTEK") -eq 1 ] && echo "Nagyobb, mint 0"
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
dabadab
titán
De az csak egész számokra működik, bash nem tud tizedestörteket kezelni, szóval szerintem a regexillesztés lesz a megoldás.
DRM is theft
Hege1234
addikt
Sziasztok!
programozás topikból küldtek ide hozzátok
bash-ba szeretném eljuttatni a .txt-be lévő sorokat a file és a resume rész után
save.shcurl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '[{"jsonrpc":"2.0","method":"Player.GetProperties","params":[1,["percentage"]],"id":17},{"jsonrpc":"2.0","method":"Player.GetItem","params":[1,["file"]],"id":18}]' | jq '.[].result.item.file, .[].result.percentage | select(. != null)' > save.txt
ez létrehozza a save.txt-tsmb://192.168.1.10/@.mkv
52.96696472167969
a load.sh betölti a videót az adott pozicióra ugorva
load.shcurl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"smb://192.168.1.10/@.mkv"},"options":{"resume":52.96696472167969}}}'
ebbe kellene valahogy a "file":
és a "resume":
után beilleszteni a txt-be lévő sorokat
bambano: itt az a gond, hogy ha a --data aposztrófok között van (ezt én se figyeltem, hogy külön paraméter), akkor a ${változó} behelyettesítést a shell nem csinálja meg. ezért a --data-t idézőjelek közé kellene tenni, viszont akkor belül a json idézőjelei be fognak kavarni, azokat escape-lni kell.
valószínűleg ez már offtopic itt, van rá szaktopic.
köszi, előre is a segítséget!
[ Szerkesztve ]
jogos, ez elkerülte a figyelmem.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Jester01
veterán
Szerencse, hogy stringeket tetszőlegesen össze lehet fűzni.echo 'foo${bar}'"${bar}"'baz'
Az elsőt nem bontja ki a másodikat igen.
Tehát a paraméter előtt szépen teszel egy idézőjelet majd bezárod az aposztrófot. Majd idézőjelbe beírod a változódat, majd visszanyitod az aposztrófot, beteszed a záró idézőjelet és minden mehet tovább.
Ha azt a 2 sort már betetted változókba mondjuk $url és $pos akkor
curl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"'"${url}"'"},"options":{"resume":'"${pos}"'}}}'
[ Szerkesztve ]
Jester
Hege1234
addikt
köszönöm szépen!
filenev=$(head -1 save.txt)
idopont=$(head -2 save.txt | tail -1)
curl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"'"${filenev}"'"},"options":{"resume":'"${idopont}"'}}}'
Headless
őstag
sziasztok!
egy megoldást keresek egy bináris fájl szétválasztására egy bizonyos hex karakter sorozat elválasztásával több részre osztani, konkrétan egy cubemap kép sorozat ami jxr (képeket, posx,posy,posz,negx,negy,negz) fájlokat tartalmaz. ezeket szeretném szétválasztani. az elválasztó lehetne a wmphoto magic numbere \x4949BC. minden wm photo kép ezzel kezdődik.
mivel bináris fájl sed meg sorokat vizsgál az nem feltétlen megfelelő, egyáltalán van-e értelme bashal szenvedni, vagy ez már inkább egyszerűbb/gyorsabb egy rendes (nem script) nyelvel?
[ Szerkesztve ]
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Hege1234
addikt
amikor így szerepelnek a sorok a .txt fájban
jq, awk vagy más hasonló megoldással, hogyan lehetne
a számokat úgy átalakítani, hogy a 2. sorba legyenek és a 10 alatti számok elé
mindig kerüljön egy 0?
curl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '[{"jsonrpc":"2.0","method":"Player.GetProperties","params":[1,["time"]],"id":17},{"jsonrpc":"2.0","method":"Player.GetItem","params":[1,["file"]],"id":18}]' | jq --raw-output '.[].result.item.file, .[].result.time.hours, .[].result.time.minutes, .[].result.time.seconds | select(. != null)' > "c:\kodi\info.txt"
eredeti:plugin://plugin.video.youtube/play/?video_id=rhMTZB2WJWA
2
3
5
elképzelt: (235)plugin://plugin.video.youtube/play/?video_id=rhMTZB2WJWA
020305
elképzelt 2.: (14325)plugin://plugin.video.youtube/play/?video_id=rhMTZB2WJWA
014325
jq és awk kombinációjával jutottam el idáig, hogy
ez lett belőle de nem sikerül rájönnöm, hogyan lehetne úgy megoldani ahogy elképzeltem
| jq --raw-output '.[].result.item.file, .[].result.time.hours, .[].result.time.minutes, .[].result.time.seconds | select(. != null)' | awk '{key=$0; getline; print key "" $0;}'
plugin://plugin.video.youtube/play/?video_id=rhMTZB2WJWA2
35
| jq --raw-output '.[].result.item.file, .[].result.time.hours, .[].result.time.minutes, .[].result.time.seconds | select(. != null)' | awk 'NR > 1 { printf("") } {printf "%s",$0}'
plugin://plugin.video.youtube/play/?video_id=rhMTZB2WJWA235
Headless
őstag
megoldottam, mivel a fájlokban van egy másik separator, azt feltudtam hasnálni, nyilván a zárt forráskódű fejlesztők is azt használják szeparátornak...
Röviden: grep kikeresem a byteoffseteket a separatorokhoz, majd végig megyek rajtuk while ciklusban, kiszámolom a megfelelő kezdő/végoffset értékeket és azt dd-vel szépen átmásálom. A separatort átírom, hogy ne legyen kereshető, nehogy megtalálja a zárt forráskódú szoftver fejlesztő, vagy bárki más aki rákeresne
Az elején van 4 byte felesleg, valamint a separator 8 byte azt hozzáadom az előző byteoffsethez
previousByteOffset=4
imageCount=0
grep -oba ggggggg "$imageFile" |while IFS=: read byteOffset rest;do
dd if="$imageFile" of="$imageFile-$imageCount.jpg" bs=$(($byteOffset-$previousByteOffset)) count=1 skip=$previousByteOffset iflag=skip_bytes
previousByteOffset=$(($byteOffset+8))
imageCount=$(($imageCount+1))
done
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Jester01
veterán
read line
echo "$line"
while read line
do
printf "%02d" "$line"
done
echo
Jester
Hege1234
addikt
sajnos nem sikerült rájönnöm ezt hol kellene használnom, hogy beleírja az info.txt -be
a felugró ablakba a beírt számok 1-9 ig mindig kaptak nullát
a 014325, 020305 viszont nem sikerült beírnom
olyan mintha, mivel 10 nél nagyobb így a szám levenné róla a nullát vagy valamilyen műveletet is csinálna közbe
Hege1234
addikt
segítséggel persze de meglett végül a megoldás
curl -s "http://kodi:kodi@192.168.1.10:8080/jsonrpc?Base" -H 'Content-Type: application/json' --data '[{"jsonrpc":"2.0","method":"Player.GetProperties","params":[1,["time"]],"id":17},{"jsonrpc":"2.0","method":"Player.GetItem","params":[1,["file"]],"id":18}]' | jq --raw-output '.[0].result + .[1].result | .item.file, ( .time | .hours * 3600 + .minutes * 60 + .seconds | strftime("%H%M%S"))' > info.txt
Fecogame
veterán
Van egy ilyen awk parancsom:
awk "BEGIN {print (($(awk "BEGIN {print (100 - 0.11)}") * 0.000025442)/100)}"
A kimenet pedig így néz ki:2.5414e-05
Na most én ezt "normálisan" kiírva szeretném megkapni, nem pedig tudományos formátumban. Találtam ezt a megoldást, de beillesztve (print cserélve printf-re) nem működik, errort dob:
awk "BEGIN {printf "%.2f", (($(awk "BEGIN {printf "%.2f", (100 - 0.11)}") * 0.000025442)/100)}"
Error:awk: line 1: syntax error at or near %
Hogyan kaphatnám meg az eredményt, ami 0.00002541401
?
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
vargalex
félisten
Ha tudod a tizedes jegyek számát, akkor:
echo | awk '{printf "%.13f", (100-0.11)*0.000025442/100}'
vagy a awk BEGIN-ben echo nélkül:
awk 'BEGIN {printf "%.13f", (100-0.11)*0.000025442/100}'
Természetesen, ha csak az általad írt kerekített érték kell, akkor a formátum a "%.11f"
.
Nem értem, hogy miért használod a beágyazott AWK-t...
Egyébként az AWK programot sima aposztrófok közé szokás tenni, így nincs kavarodás a printf formátum leírójával.
[ Szerkesztve ]
Alex
Fecogame
veterán
Sajnos nem tudom, hány tizedesjegy lesz benne.
Azért tettem macskakörmök közé, mert használok benne 2 változót is, csak most az egyszerűség kedvéért behelyettesítettem számokkal
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
Lenry
félisten
egy bash scriptem egy while ciklussal szalad végig egy mappán, és végzi el a feladatát.
lehet valahogy előre tudni, hogy hány elemen fog dolgozni?
ki szeretném íratni, hogy pl a 130-ból a 15. mappán dolgozik épp'. utóbbi nyilván nem gond. előbbire viszont nincs ötletem
[ Szerkesztve ]
Gvella Glan! | There are two types of people: Those who can extrapolate from incomplete data
Jester01
veterán
Először kigyűjtöd a listát amin végig kell menni?
Jester
Lenry
félisten
find . -mindepth 1 -maxdepth 1 -type d -name "*" -print | while ((i++)); read path
do
.....
done
ennyi az egész
[ Szerkesztve ]
Gvella Glan! | There are two types of people: Those who can extrapolate from incomplete data
Jester01
veterán
dirs=(*/)
i=1
for path in "${dirs[@]}"
do
echo $((i++))/${#dirs[@]} "$path"
done
Jester
Headless
őstag
Szia
ehhez hasonló megoldás lehet
dir_list=$(find . -mindepth 1 -maxdepth 1 -type d -name "*" -print)
dir_count=$(echo "$dir_list" |wc -l)
echo "$dir_list" |while ((i++)); read path
do
.....
done
Én csak másoltam a te funkcióidat azt nem vizsgáltam, hogy megfelelő-e, vagy, hogy van-e egyszerűbb, mellesleg szerintem van kicsit fura a while ciklusod, nem is tudom hogy ez szintaktikailag helyes-e.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Lenry
félisten
hibátlanul fut, szóval olyan nagyon nem lehet elb*szva.
köszi a válaszokat
Gvella Glan! | There are two types of people: Those who can extrapolate from incomplete data
JoinR
senior tag
Legkevesebb módosítással:
LEN=$(ls -l | grep -c ^d)
find . -mindepth 1 -maxdepth 1 -type d -name "*" -print | while ((i++)); read path
do
echo $i/$LEN
done
Lenry
félisten
bakker, ez annyira egyszerű, nem tudom hogy nem jutott eszembe
köszi
[ Szerkesztve ]
Gvella Glan! | There are two types of people: Those who can extrapolate from incomplete data