Hirdetés

2024. április 20., szombat

Gyorskeresés

Hozzászólások

(#2601) KrAt válasza Keem1 (#2599) üzenetére


KrAt
veterán

ha bash -x ./script.sh előtaggal futtatod, akkor látjuk, milyen értéket vesz fel, próbáld úgy

(#2602) Keem1 válasza bambano (#2600) üzenetére


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 ]

(#2603) KrAt válasza Keem1 (#2602) üzenetére


KrAt
veterán

+ excludes=("home/juliska/tmp")

tar parancsban '--exclude='\''home/juliska/tmp'\'''

Ez nekem nem tetszik

[ Szerkesztve ]

(#2604) bambano válasza Keem1 (#2602) üzenetére


bambano
titán
LOGOUT blog

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

(#2605) Keem1 válasza bambano (#2604) üzenetére


Keem1
addikt

Sajnos úgy se megy :U 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:~ $

(#2606) bambano válasza Keem1 (#2605) üzenetére


bambano
titán
LOGOUT blog

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

(#2607) Keem1 válasza bambano (#2606) üzenetére


Keem1
addikt

Így jó :C

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 :R

(#2608) bambano válasza Keem1 (#2607) üzenetére


bambano
titán
LOGOUT blog

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

(#2609) Fecogame


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

(#2610) dabadab válasza Fecogame (#2609) üzenetére


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

(#2611) Fecogame válasza dabadab (#2610) üzenetére


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

(#2612) _kovi_


_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

(#2613) Fecogame válasza _kovi_ (#2612) üzenetére


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

(#2614) _kovi_ válasza Fecogame (#2613) üzenetére


_kovi_
aktív tag

Köszi! :) :R

(#2615) Véreshurka


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

(#2616) lev258 válasza Véreshurka (#2615) üzenetére


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ő

(#2617) Véreshurka válasza lev258 (#2616) üzenetére


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

(#2618) bambano válasza Véreshurka (#2615) üzenetére


bambano
titán
LOGOUT blog

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

(#2619) lev258 válasza Véreshurka (#2617) üzenetére


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ő

(#2620) Véreshurka válasza lev258 (#2619) üzenetére


Véreshurka
senior tag

Tudsz ajánlani kezdőknek szóló oldalt a script-ekről?

El Psy Kongroo

(#2621) Véreshurka válasza bambano (#2618) üzenetére


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

(#2622) dabadab válasza Véreshurka (#2615) üzenetére


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

(#2623) Véreshurka válasza dabadab (#2622) üzenetére


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

(#2624) Sonja


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? :F

Ha csalódni akarsz, bízz az emberekben!

(#2625) dabadab válasza Sonja (#2624) üzenetére


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

(#2626) _kovi_


_kovi_
aktív tag

Sziasztok!
Fájlnévre illeszkedést milyen paranccsal tudom vizsgálni egy scriptben?
AWK? SED ?
Köszi! :)

(#2627) Sonja válasza dabadab (#2625) üzenetére


Sonja
veterán

Köszi! :R

Ha csalódni akarsz, bízz az emberekben!

(#2628) Jester01 válasza _kovi_ (#2626) üzenetére


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

(#2629) _kovi_ válasza Jester01 (#2628) üzenetére


_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 ]

(#2630) bambano válasza _kovi_ (#2629) üzenetére


bambano
titán
LOGOUT blog

gpwfile=$(date '+%F.gwz')

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#2631) dabadab válasza _kovi_ (#2629) üzenetére


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

(#2632) bambano válasza dabadab (#2631) üzenetére


bambano
titán
LOGOUT blog

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

(#2633) dabadab válasza bambano (#2632) üzenetére


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

(#2634) _kovi_


_kovi_
aktív tag

dabadab és bambano köszönöm mindkettőtöknek! :R

(#2635) _kovi_


_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 ]

(#2636) dabadab válasza _kovi_ (#2635) üzenetére


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

(#2637) _kovi_ válasza dabadab (#2636) üzenetére


_kovi_
aktív tag

Bakker :W

Köszönöm! :R

(#2638) bambano válasza dabadab (#2636) üzenetére


bambano
titán
LOGOUT blog

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...
:P

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#2639) bambano válasza _kovi_ (#2635) üzenetére


bambano
titán
LOGOUT blog

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

(#2640) dabadab válasza bambano (#2638) üzenetére


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

Copyright © 2000-2024 PROHARDVER Informatikai Kft.