Új hozzászólás Aktív témák
-
Keem1
addikt
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[ Szerkesztve ]
-
-
Keem1
addikt
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:~ $ -
-
-
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
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[@]}
doneDRM is theft
-
_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 -
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
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.
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
-
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
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
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.Ubuntu MATE 20.04, hobbi cayenne termesztő
-
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
El Psy Kongroo
-
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)
[ Szerkesztve ]
DRM is theft
-
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!
-
_kovi_
aktív tag
Sziasztok!
Fájlnévre illeszkedést milyen paranccsal tudom vizsgálni egy scriptben?
AWK? SED ?
Köszi! -
_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..
[ Szerkesztve ]
-
-
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
-
-
_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.jpgMié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
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... -
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 abasename
utasítást. ez nekem azt mutatja, hogy volna mit optimalizálni a történetenEgy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
_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/
-
-
_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 egydate >> /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álszLassú 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 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 isLassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
-