- Elektromos rásegítésű kerékpárok
- Luck Dragon: Asszociációs játék. :)
- gban: Ingyen kellene, de tegnapra
- Viber: ingyen telefonálás a mobilodon
- Gurulunk, WAZE?!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- MasterDeeJay: Legújabb beszerzésem: Sata to Sas adapter
- Lalikiraly: SÜNI energiaital.
- MasterDeeJay: H110-es lapban 10.gen Comet Lake működhet?
- hdanesz: Elektromos autózás - Hyundai Ioniq 28 kWh - 2018
Új hozzászólás Aktív témák
-
tjsz
senior tag
válasz
f_sanyee #2699 üzenetére
root@Router:/tmp/home/root# for d in $(awk '{ print $1}' /var/lib/misc/dnsmasq.leases); do echo -n "$d: "; date "+%Y-%m-%d %H:%M" -d @${d}; done
603566: 1970-01-08 00:39
594732: 1970-01-07 22:12
339516: 1970-01-04 23:18
500044: 1970-01-06 19:54
541145: 1970-01-07 07:19
604800: 1970-01-08 01:00
235115: 1970-01-03 18:18
386945: 1970-01-05 12:29
604157: 1970-01-08 00:49
589094: 1970-01-07 20:38
603861: 1970-01-08 00:44
596755: 1970-01-07 22:45
569503: 1970-01-07 15:11
555154: 1970-01-07 11:12
529923: 1970-01-07 04:12
81783: 1970-01-01 23:43
101094: 1970-01-02 05:04
89397: 1970-01-02 01:49
106480: 1970-01-02 06:34
524019: 1970-01-07 02:33
510826: 1970-01-06 22:53
429562: 1970-01-06 00:19
517980: 1970-01-07 00:53
518487: 1970-01-07 01:01
root@Router:/tmp/home/root# dnsmasq -v
Dnsmasq version 2.80-7d04e17 Copyright (c) 2000-2018 Simon Kelley
Compile time options: IPv6 GNU-getopt no-RTC no-DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset Tomato-helper auth DNSSEC no-ID loop-detect inotify no-dumpfile
This software comes with ABSOLUTELY NO WARRANTY.
Dnsmasq is free software, and you are welcome to redistribute it
under the terms of the GNU General Public License, version 2 or 3.
root@Router:/tmp/home/root#
FreshTomato firmware.
-
f_sanyee
senior tag
nem tudom milyen dnsmasq verzióban lehet az elsó oszlop a lease time, de az enyémben itt a lease vége van, epoch formában, pl:
router:~# for d in $(awk '{ print $1}' /var/lib/misc/dnsmasq.leases); do echo -n "$d: "; date "+%Y-%m-%d %H:%M" -d @${d}; done
1640798190: 2021-12-29 18:16
1640766485: 2021-12-29 09:28
1640759983: 2021-12-29 07:39
1640788042: 2021-12-29 15:27
1640799888: 2021-12-29 18:44
1640794808: 2021-12-29 17:20
1640798330: 2021-12-29 18:18
1640791708: 2021-12-29 16:28
1640790907: 2021-12-29 16:15
router:~# date
Wed Dec 29 07:18:07 CET 2021a DNS cache-nek ehhez semmi köze, ezek DHCP leasek.
napi reportnak ebből nem sok értelme van szerintem, inkább nézném a dnsmasq logját, hogy mikor osztott ki valaminek címet.. -
tjsz
senior tag
válasz
f_sanyee #2694 üzenetére
A dnsmasq.leases file 1. oszlopában a "dhcp lease time"-ból hátralévő idő van tárolva másodpercben. Tehát ha pl. 1 hétre kap minden eszköz IP címet, akkor az IP cím kérés 1. másodpercében 604800 az érték, majd ez szépen csökken 1-esével másodpercenként egészen addig, amíg le nem nullázodik ill. ha nem kér újra IP címet az adott eszköz.
A probléma ott volt/van, hogy bár a dns cache ki van kapcsolva, a dnsmasq.leases file csak akkor frissül, ha egy újabb eszköz kér IP címet, ekkor az 1. oszlopban lévő értékek korrigálásra kerülnek. Vagyis: nem a systime()-al volt a gond, hanem ezzel a cache-eléssel.
Közben egy újabb kérdés fogalmazódott meg bennem: mivel ugyanazon script többféle esemény miatt is elindításra kerülhet (pl. WAN oldal up vagy éppen down, napi riport készítés, stb.), ezért hogyan lenne érdemes azt megoldani, hogy egyidejűleg csak 1 példányban induljon el? Valami ideiglenes file létrehozás-törléssel? (és annak ellenőrzésével)
-
tjsz
senior tag
Sziasztok!
Nem tudom, hogy jó helyen járok-e, de segítségre lenne szükségem: miért van az, hogy az alábbi "programkód" mindig más-más DHCP kérési időpontot ad ki, pedig közben a listabeli gépek még bekapcsolva sem voltak. Érdekes módon az eltérés mindig annyi, ahány másodperccel később futtatam.
root@Router:/tmp/home/root# cat /var/lib/misc/dnsmasq.leases|awk '{print $3, $2, $4, $1}'|sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n|awk -v dhcplt=604800 '{print $4,systime()+$4-dhcplt, $2, $1, $3}'|awk '{ if
($1 == "0" ) print "Unknown - infinite "," ",$3," ",sprintf("%-18s",$4),$5; else print strftime("%c", $2)," ",$3," ",sprintf("%-18s",$4),$5; }' >> "$file_email_std"
Sun Dec 19 08:43:35 2021 50:e5:94:12:34:56 192.168.1.1 Home_pc
Sun Dec 19 08:51:30 2021 bc:5f:4f:12:34:56 192.168.1.2 Home_pc_2
root@Router:/tmp/home/root# cat /var/lib/misc/dnsmasq.leases|awk '{print $3, $2, $4, $1}'|sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n|awk -v dhcplt=604800 '{print $4,systime()+$4-dhcplt, $2, $1, $3}'|awk '{ if
($1 == "0" ) print "Unknown - infinite "," ",$3," ",sprintf("%-18s",$4),$5; else print strftime("%c", $2)," ",$3," ",sprintf("%-18s",$4),$5; }'
Sun Dec 19 08:43:45 2021 50:e5:94:12:34:56 192.168.1.1 Home_pc
Sun Dec 19 08:51:40 2021 bc:5f:4f:12:34:56 192.168.1.2 Home_pc_2
root@Router:/tmp/home/root# cat /var/lib/misc/dnsmasq.leases|awk '{print $3, $2, $4, $1}'|sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n|awk -v dhcplt=604800 '{print $4,systime()+$4-dhcplt, $2, $1, $3}'|awk '{ if
($1 == "0" ) print "Unknown - infinite "," ",$3," ",sprintf("%-18s",$4),$5; else print strftime("%c", $2)," ",$3," ",sprintf("%-18s",$4),$5; }'
Sun Dec 19 08:44:17 2021 50:e5:94:12:34:56 192.168.1.1 Home_pc
Sun Dec 19 08:52:12 2021 bc:5f:4f:12:34:56 192.168.1.2 Home_pc_2
root@Router:/tmp/home/root# exit
Tehát pl. az egyik futtatáskor a Home_pc 8:43:35-kor, 10 másodperccel későbbi futtatáskor mintha 8:43:45-kor kért volna IP címet.
DNS cache beállítva 0-ra, tehát nem cache-el.
-
-
Hogyan lehetne megszámolni, hogy adott számsorozat elemei között (ebben a sorrendben nézve) hányszor történt emelkedés/csökkenés? Példa:
2
3
4
6
2
1
7
3A fenti példában 4 alkalommal emelkedett és 3 alkalommal csökkent az érték.
Nyilván összehasonlítom az aktuálisat az előzővel, ez rendben van, csak hogyan kezelem le ezt a legelső elemnél? Counterrel a for cikluson belül?
-
_kovi_
aktív tag
Sziasztok!
Lenne egy olyan gondom, hogy fájlokat kell generálnom és a fájlnév utolsó 4 karakterében egy számot teszek ami növelődik, pl.: 0001, 0002, 0003, 0004 .... stb
A Bashnek van egy gondja ezzel a számmal, mert ahogy olvastam oktálisnak veszi.
Konkrétan 0008-ig szépen megcsinálja a fájlokat és aztán a debugban:0008: túl nagy érték a számrendszerhez (hibás token: „0008”
Így csináltam a kódban:
SZAMLALO=$((SZAMLALO+1))
SZAMLALO=$(printf "%04d\n" $((10#$SZAMLALO)))Úgy találtam googliban, hogy a 10# -al meg lehet neki mondani, hogy 10-es számrendszerben legyen, de valahogy nem eszi meg..
Ez működik, de beleteszi a fájlnévbe a # -ot:
SZAM=$(printf "%04d\n" $SZAMLALO)
SZAMLALO=10#$SZAM
Amit elvileg meg tudnék cut- olni de nem túl elegáns.Köszi!!
-
coco2
őstag
válasz
Jester01 #2680 üzenetére
Megvan, köszönöm
Nyersanyag tippet had kérjek script gyártáshoz.
Bash scriptben listázni szeretném a helyi könyvtárat ( ./ ), és ha találok file-t adott kiterjesztéssel (pld ".txt" -> létezik "file.txt"), első (vagy akár utolsó) olyan létező file nevét szeretném változóba rakni (FILENAME="file.txt"). A határozatlanság oka, hogy a mappában garantáltan csak egy olyan file lesz, de ha mégis több lenne, azt valahogyan detektálni kell, és leállítanom a scriptet, vagy hibatűrés jelleggel csak az egyiket dolgozni fel a sok közül. Bármelyik jó.
Ha jól sejtem, valami áradat szerkesztővel kell majd játszadoznom. Jól jönne rá pár példa, hogyan, és hogy az áradatszerkesztő scriptjéből hogyan mozgathatok adatot kívülre, ha egyáltalán bárhogyan.
-
coco2
őstag
Sziasztok!
Linux / bash script. Kicsit (nagyon) kijöttem a gyakorlatból.
Van egy környezeti változó, T_STR. Benne van mondjuk ez: "custom str". Környezetből használom shell scriptben (/bin/bash enyem_script.sh) valahogy így:
#!/bin/bash
echo "${T_STR}"
echo "$T_STR"
echo ${T_STR}
echo $T_STRValaki le tudja írni nekem legalább dióhéjban, hogy mi a különbség ezek között az echo-k között? Ami különbség van, az mikor számít?
A ""-ről talán az volt, hogy ha space van a stringben, és nem raktam macskakörmök közé a változó értékét olyankor, amikor egy shell parancsba beillesztettem, akkor az két külön paraméternek minősülhet, és "szét törhet" miatta a parancs bemenetem. De erre visszaigazolást várnék tényleg ez van-e vele, vagy rosszl emlékszem?
A { }-ről valami változó érték értelmezés volt talán, de már nem emlékszem.
-
Headless
őstag
válasz
Fecogame #2675 üzenetére
ha nagyon érdekel a teljesítmény shellt miért nem felejted el? pl megcsinálhatod az egészet awk-val. Még lehet egy python is gyorsabb. vagy ha tényleg számít minden us akkor c++.
annó csináltam egy tesztet:
1-1000-ig vizsgáltam a számokat, hogy prím-e és a tisztán awk megoldás töredéke volt, mint a sima shell megoldásnak. -
dabadab
titán
válasz
Fecogame #2675 üzenetére
ksh-ban szeretnék tört számokkal dolgozni
Igen, ezt hívják statisztikusnak.
Egyébként meg pont úgy működik, mint C-ben: ha sima egész számokat adsz meg, akkor integer aritmetikát használ, ha lát benne tizedespont (vagy vesszőt, éljen a lokalizáció
), akkor meg floating pointot:
db@jano:~$ ksh -c 'echo $((24832/23413.0))'
1.06060735488830991(Ja, és nincs floating point minden ksh-ban, verziótól függ)
-
ksh-ban szeretnék tört számokkal dolgozni, lehetőleg külső parancs nélkül. Az oka, hogy több tízezerszer kell lefuttatnom, és számít, mennyi idő alatt végez. awk-val már megcsináltam, csak lassú.
A furcsa az, hogy itt kiírja rendesen az eredményt tört számként:
pi@raspberrypi:~ $ ksh -c 'echo $((250/0.8))'
312.5Itt viszont nem:
pi@raspberrypi:~ $ ksh -c 'echo $((24832/23413))'
1
És így sem:
pi@raspberrypi:~ $ ksh -c 'echo $((23413/24832))'
0
Miért? És hogyan lehetne rávenni, hogy ne kerekítsen?
-
-
-
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.
-
-
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 -
vargalex
félisten
válasz
Fecogame #2663 üzenetére
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. -
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
? -
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
-
Hege1234
addikt
válasz
Jester01 #2660 üzenetére
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 -
Headless
őstag
válasz
Headless #2657 üzenetére
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ákeresneAz 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
-
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
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?
-
Hege1234
addikt
válasz
Jester01 #2655 üzenetére
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}"'}}}'
-
Jester01
veterán
válasz
Hege1234 #2653 üzenetére
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}"'}}}'
-
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.sh
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,["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.sh
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":"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ő sorokatbambano: 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!
-
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 lehet0.534545
,6.3434
vagy8
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 -
_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?!... -
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.
-
_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! -
_kovi_
aktív tag
válasz
bambano #2639 üzenetére
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... -
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.
-
_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.jpgMiért nem kezeli külön, hogy végigmegy az elemeken?
Köszi!
-
_kovi_
aktív tag
dabadab és bambano köszönöm mindkettőtöknek!
-
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.
-
_kovi_
aktív tag
válasz
Jester01 #2628 üzenetére
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..
-
_kovi_
aktív tag
Sziasztok!
Fájlnévre illeszkedést milyen paranccsal tudom vizsgálni egy scriptben?
AWK? SED ?
Köszi! -
Sonja
nagyúr
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?
-
dabadab
titán
válasz
Véreshurka #2615 üzenetére
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)
-
Véreshurka
senior tag
válasz
bambano #2618 üzenetére
Köszönöm!
Csak hogy világos legyen számomra:
afor i
kezdéssel határozod meg hogy a${i}
jelentse az összesin
utáni mappát? Ha igen akkor mndig csak ki kell egészítenem azin
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
-
lev258
veterán
válasz
Véreshurka #2617 üzenetére
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. -
bambano
titán
válasz
Véreshurka #2615 üzenetére
kb. ezt kellene:
for i in mappa3 mappa4 mappa5; do
[ test -d $i ] && [ test -d "${i}.bac" ] && rsync -a --delete $i "${i}.bac"
done
-
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]
-
lev258
veterán
válasz
Véreshurka #2615 üzenetére
Az rsync-hez nem igazán értek, de jelenleg az if használatod jobban zavar. Logikailag nem értem a dolgot.
-
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!
-
_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 -
dabadab
titán
válasz
Fecogame #2609 üzenetére
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 -
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.
-
Keem1
veterán
válasz
bambano #2604 üzenetére
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:~ $ -
Keem1
veterán
válasz
bambano #2600 üzenetére
++ 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
Új hozzászólás Aktív témák
Hirdetés
- EA Sports WRC '23
- Kettő együtt: Radeon RX 9070 és 9070 XT tesztje
- E-roller topik
- The First Berserker: Khazan
- Milyen légkondit a lakásba?
- Xbox Series X|S
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Azonnali notebookos kérdések órája
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Vírusirtó, Antivirus, VPN kulcsok
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- BESZÁMÍTÁS! ASUS TUF Z390-PRO GAMING alaplap garanciával hibátlan működéssel
- BESZÁMÍTÁS! Asus B760M i7 12700KF 32GB DDR4 512GB SSD RX 6800 16GB Rampage SHIVA FSP 700W
- Azonnali készpénzes nVidia RTX 3000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- Konzol felvásárlás!! Nintendo Switch
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest