Nem próbáltam, azt mondod, a -delete
nem törli a nem üres könyvtárat? Akkor cseréld le: -exec rm -r {} +
Jester
Nem próbáltam, azt mondod, a -delete
nem törli a nem üres könyvtárat? Akkor cseréld le: -exec rm -r {} +
Jester
A -delete csak az üres könyvtárakat tudja törölni.
Ezzel az utóbbi módosítással kitörli az összes alkönyvtárat, a fájlokat hagyja csak meg...
[ Szerkesztve ]
Na, kipróbáltam. Ez szerintem jó lesz:find . -depth -mindepth 2 \( -type f \! -path '*/res/values/*' -o -type d -empty \) -delete
Jester
Ez most jó, köszi!
Sziasztok,
most csinálok éppen egy egyszerű scriptet, ami hétfőnkét egy adott sort beszúr minden file-be.
#!/bin/bash
n1=`date +"%A"`
n2=hétfő
c=`date +"%V"`
n=`date +"%A"`
x=/mnt/sdc10/home/iras/*
if [ "$n1" = "$n2" ]; then
for i in $x;
do
echo "$c. $n #############################################" >> $i;
done
else
echo "Nem hétfő van!"
fi
exit
Miután lefut ezt az üzit irja ki:
"./3_mi_a_neved: line 10: /mnt/sdc10/home/iras/: Is a directory"
Hogyan kellene javítani?
Az "iras" mappában csak kiterjesztés nélküli fájlok vannak.
A sok "#" karaktert hogyan lehetne rövidebben írni? (pl. 33#)
üdv
felejtsd el ezt a hétfő ellenőrizgetést.
nem az a jó módszer, hogy elindítod minden nap, és megnézed, hétfő van-e, hanem az, hogy csak hétfőn indítod el.
a hozzáfűzés meg lehet, hogy azért nem megy, mert könyvtár vagy könyvtárra mutató link is van az írásos könyvtárakban.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Csináltam egy új mappát, s bemásoltam oda a file-ket, s tényleg nem volt semmi hibaüzi.
Nekem mindig lesz, ez van…
Az "if" az kell, mert olyan script-be lesz ami minden nap "fut".
üdv
ha beírod az elejére, hogy set -x, akkor debug módban fut és többet lehet tudni róla, hogy mit csinál.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
x=/mnt/sdc10/home/iras/*
szerintem ez lesz a rossz. A kiterjesztés nélküli file-kre nem jó a "*". Így a mappák is (sőt még az almappák is!) benne vannak.
Hogyan kellene, azt nem tudom, írtam a linux-os topicba, valaki csak tudja.
A "set-x" -es próbálgatom más scripteknél is. Nem tudtam, hogy van ilyen.
Hát vagy find-al keresed meg és futtatod amit kellfind $x -type f -exec ....
vagy
a meglévő for ciklusba teszel egy ellenörzést hogy fájl-e...
valahogy így
if [ -f "$file" ];then
echo "file"
fi
ha van printf parancsod, akkor megfelelő számú szóközt tudsz csinálni valahogy így. azt meg kicserélheted #-re de szerintem nem éri meg, lehet van jobb megoldás is.printf "%33s" |sed "/ /#/g"
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Köszi mindenkinek a segítséget!
Végül is ezt sikrült "fabrikálni":
find . -maxdepth 1 -type f ! -name "*.*"
üdv
"A kiterjesztés nélküli file-kre nem jó a "*".": miért ne lenne jó? a linuxon általában nincs kiterjesztés, szóval ne lenne jó az esetek többségére?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Úgy értette, hogy csak a kiterjesztés nélküliekre.
Az "általában nincs kiterjesztés" meg vicces állítás. Programfájlokon általában nincs, de minden máson jellemzően van. De ezt te is tudod.
Jester
Megnéztem egy Debianon, a nem home-ban lévő file-ok 94%-ának van kiterjesztése.
DRM is theft
ennek a fájlnak:
/lib/x86_64-linux-gnu/libcryptsetup.so.4.6.0
mi a kiterjesztése?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Azon lehet vitatkozni, de van neki Ezzel együtt még mindig bőven több a hagyományos kiterjesztéssel rendelkező fájl.
Jester
.so, termeszetesen
while (!sleep) sheep++;
while [ $(ls /egyik/path | wc -l) -gt $(ls /masik/path | wc -l) ]
do
some commands
done
A vastagított rész értékéhez szeretnék hozzáadni egyet. Hova kellene beírnom, és legfőképp, hogyan?
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
Pl.:
while [ $(ls /egyik/path | wc -l) -gt $(expr $(ls /masik/path | wc -l) + 1) ]
while [ $(ls /egyik/path | wc -l) -gt $((( $(ls /masik/path | wc -l) + 1 ))) ]
De biztos vannak szebb megoldások is.
[ Szerkesztve ]
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
az aritmetikai kiértékelés az nem két zárójel?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
$( (( $(ls /masik/path | wc -l) + 1 )) )
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
helyesen:
$(( $(ls /masik/path | wc -l) + 1 ))
man bash:
Arithmetic Expansion Arithmetic expansion allows the evaluation of an arithmetic expression and the substitution of the result. The format for arithmetic expansion is:$((expression))
ha így tagolod, akkor csinál egy parancsbehelyettesítést egy egész számra???
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Ja de, igazad van, elég két zárójel, persze... Csak a $(...) között variáltam előtte és abba írtam bele, így lett $( $((...)) ). De végül is működik hárommal is.
[ Szerkesztve ]
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
Köszi, működik!
Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak
Sziasztok,
itt a grep miért nem működik?
Ha echo-val kiiratom a line változót szépen megvan, csak a grep nem eszi meg.for line in $(cat 1.txt); do grep "$line" /sandbox/incoming/* -l ; done
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
A -l rossz helyen van. Amúgy a "grep nem eszi meg" nem egy jó hibaleírás, az ilyenért pofon jár.
Jester
Bárhova tettem a -l
paramétert az eredmény változatlanul semmi.
Ha a $line paramétert kézzel adom meg a grep-nek szépen listázza a fileokat. Mihelyt egy ciklusba ágyazom az eredmény semmi. De ha echo $line -t még utána biggyesztem akkor az echo-s sorok megjönnek.
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
Állítólag itt nagyobb eséllyel kapok választ
Dijnet törli számlákat, nekem viszont szükségem lenne rá, de vagy 1 év lenne letölteni egyenként mindet, és emailben konkrétan mossák kezeiket, hogy ilyen helyzetbe hozzák az embereket.
Találtam HUP-on egy megoldást, és más linux rendszerem nincs, csak Synology ds215j
Itt a Shell Script hozzá, viszont login után azt írja ki, hogy:
login... OK
query service providers... ERROR: not able to detect service providers
Terminated
Van valami tippetek, hogy miért? Linkek elméletileg jók, legalábbis amit értettem belőle, vagy kell valamit telepítenem hozzá még pluszba?
PROVIDERS=$(dijnet "control/szamla_search" | xpath '//select[@name="szlaszolgid"]/option[string-length(@value)!=0]')
Gondolom nem az xpath-nak megfelelő tartalom jön vissza. Nézd meg mi a dijnet "control/szamla_search"
kimenete.
Jester
"https://www.dijnet.hu/ekonto/control/szamla_search"
Ez az oldal (link), és azon belül pedig van egy legördülő választó, aminek a DIVje szlaszolgid, és abban van kb 6-7 bejegyzés ahogy a képen látható
Másnak működik, csak nekem nem, Synology DS215Jn próbálom futtatni SSHn keresztül root/admin joggal. Kell ehhez valami egyéb dolgot telepíteni?
[ Szerkesztve ]
xmllint hiányzott!
Sziasztok
Van egy vékonykliensem, ami valamiért eldobálja a netet. Hálózat van, csak a nagyvilágba nem lát ki.
Amíg nem találom meg az okát, írtam egy ilyet:
#!/bin/bash
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline, restarting eth0 interface"
date +"%Y/%m/%d %H:%M:%S : Restarting" >> online.txt
ifconfig eth0 down && ifconfig eth0 up
fi
Működik is, megy a crontabba, a kérdésem igazából annyi lenne, hogy érdemes ezen valahol csiszolni (timeout érték, ciklusba tenni, wget helyett ping/curl stb)? Köszi
"érdemes ezen valahol csiszolni (timeout érték, ciklusba tenni, wget helyett ping/curl stb)?"
igen, nagyjából ez
a wget helyett egy icipicivel kevesebb sávszélességet használ mondjuk egy
ping -c 1 -w 1 google.com >/dev/null
(ez is exit statusszal üzen, szóval utána az if maradhat)
Meg persze be lehet rakni az egészet egy ciklusba és nem cronból indítani (gondolom percenként), hanem folyamatosan futtatni és belerakni a ciklus végébe egy "sleep 1"-et és akkor már másodpercenként tudja ellenőrizni a netet.
DRM is theft
Szia
Köszi szépen.
Átírtam, bár a sávszélesség nem játszik nagyon szerepet, otthoni net, nincs data limit.
Cikkluson gondolkodtam én is, bár az 1 seccenként való futtatás teljesen felesleges szerintem.
Most valóban 1 percenként fut a debug alatt, a későbbiekben meglátom, hogy így hagyom-e .Szép estét
Sziasztok
#!/bin/sh
LogDir=/opt/log
find $LogDir -name "*.bak*" -exec ls -lah {} \; >> /opt/log/log.log
find $LogDir -name "*.bak*" -type f -print0 | xargs -0 rm -f
A két find helyett az első find eredményét szeretném cikklusba tenni és úgy futtatni a törlést. Tudna valaki segíteni, hogyan kellene? Köszi
[ Szerkesztve ]
Szia nem egészen értem mit akarsz.
find az ígyis úgyis recursive ha csak nem beállítod a -maxdepth -mindepth kapcsolókat. Másrészt miért a xarg? ha ott van a beépített delete funkció?
find "$LogDir" -name "*.bak*" -type f -delete
ahh most leeesett tehet a *.bak* mappán balüli *.bak* fájlokat szeretnéd törölni?
ehhez viszont nagy kérdés hogy csak a *.bak/*.bak-et akarod törölni vagy *.bak/akarmi/*.bak-et is
amúgy én a -path szűrőt használnám... először delete nélkül futtasd, nehogy törölj valamit ami kell..
find "$LogDir" -path "*.bak/*.bak" -type f -delete
ez az utóbbi verzió ami a *.bak/akármi/*.bak-ot is törli.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
logot tee-vel lehet csinálni:
find $LogDir -name '*.bak' | tee logfile | while read filenev; do rm -f "$filenev"; done
az ls -lah kimeneti formátuma nem alkalmas közvetlen törlésre.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Sziasztok,
@Headless
/opt/log/ alatt minden (al)könyvtárból.
"miért a xarg" Hirtelen ezt találtam gugliban.
a -delete-t nem próbáltam ki, de nem tudom, hogy a logolást mennyire nehezítené meg.
@bambano, köszi, utánaolvasok a teenek.
ls-lah azért ugrott be elsőnek, mer így könnyen tudom a fájlméretet is logolni.
Működik így is szépen 2 külön paranccsal, csak hát szebb lenne optimalizálva futtatni
Sziasztok
Van egy számolós scriptem, parancssorban kérek be két számot. Amit meg szeretnék oldani, az az, hogy fogadja el a tizedespontot is amennyiben a pont után 0-k vannak csak, vagy semmi (tehát 10. = 10.0 = 10.0000 = 10)
Próbáltam valami pattern-t ('*([1-9])?(.)*(0)') írni, de ez nem jó.
Ami még kikötés, hogy csak ksh belső parancsok használhatók.
Tudnátok ebben segíteni?
szerintem a patterned nem jó.
[0-9]+\.[0]*$
vagy valami ilyesmi kellene.
a (.)*(0)-t nem értem, a *-ot mindig azután kell tenni, amiből többet akarsz.
a másik lehetőség, hogy a szám végéről levágod a .0* patternt, ha van ott olyan, és utána csak egész számos illeszkedést ellenőrzöl.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
"a (.)*(0)-t nem értem" - nyugi, én sem ; csak próbálkoztam, még tanulom csak a shell scriptet
ez lett a jó: +([0-9])?(.)*(0)
próbáld már ki egy 10.00500 és egy 10A000 számmal légyszi.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
nem fogadja el ezeket, elfut if-es feltételnél az else ágra
Sziasztok!
Egy CGI szkript írásán dolgozom, ami természetesen bash alapú és POSTDATA-t hivatott feldolgozni. Van egy QUERY_STRING változóm, értelemszerűen ebbe kerül a Query String. Ami pedig így néz ki pl:
rsscontent=<változó szöveg>&Submit=Submit
Nekem valahogy az rsscontent utáni <változó szöveg>-et kéne egy változóban megkapnom, úgy, hogy az ékezetes karakterekkel és az & jelekkel is tudjon mit kezdeni.
Olyan szempontból könnyű a dolog, hogy minden statikus, csak az rsscontent értéke nem...
Tudnátok segíteni? Köszi!
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
Ez az a pont amikor vagy váltasz valami erre használatos nyelvre (lua,php,stb). Vagy a form enctype-ját átállítod multipartra. Viszont így a változó beállítások sokszor nehezebbek lesznek, és pl az sem fog működni, amit írtam pü-ben tegnap.
<form action=… method=post enctype='multipart/form-data'>
Így rendesen szeparált listát kapsz a változókról, nem csak egy urlenkódolt listát, vagyis nem & lesz a szeparátorod.
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
nagyon balta megoldás:
kveri=$(echo $QUERY_STRING| sed -e 's/^rsscontent=//' -e 's/&Submit=Submit$//')
vagy valami ilyesmi
szerk: paraméter darabolásra szintén balta megoldás:
echo $kveri | IFS=\& read par1 par2 par3 ...
az & jelekkel elvileg nem lesz gond, mert az inputként kapott & jelet a böngésző kódolja.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Én valami ilyesmit csinálnék:
rsscontent=$(echo -e $(echo "rsscontent=<változó szöveg>&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
Azaz, ha URL encode-olva jön, és az rsscontent tartalma pl.: "változó&szöveg":
gavarga@gavarga-e5540 ~ % rsscontent=$(echo -e $(echo "rsscontent=v%C3%A1ltoz%C3%B3%26sz%C3%B6veg&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
gavarga@gavarga-e5540 ~ % echo $rsscontent
változó&szöveg
Alex
Nagyon szépen köszönöm uraim a gyors segítséget!
@Headless
Luát webszerveren nem szeretnék futtatni, a PHP-val meg igen régen volt dolgom... Azon gondolkozom, hogy az összes jelenlegi szkriptet átírom Perl-re... Szerintem azzal járnék a legjobban, hisz tulajdonképp az összes ilyen form adatfeldolgozás "stringműveletekből" áll.
Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!
Sziasztok!
Nem igazán értek a shell programozáshoz. Szerettem volna a whoami függvény eredményét változóba menteni, de nem ment, persze ha hegy számot akarok megadni, akkor megy. Folyton azt kapom hibánat, hogy a =: nem támogatott. Pedig ez jó:var1 = 2
ezzel nincs baja, viszont már ezzel igen:var2 = whoami
Aztán rákerestem neten, és eval-os megoldásokat találtam, kipróbáltam, ugyanúgy csak hiba-hiba hátán, grrrr.
Amihez nekem kellene segítség az csak ennyi:echo 'alias vagrant="cd /vagrant"' | tee /home/vagrant/.bash_aliases
A vagrant helyett szeretném a whoami függvény eredményét megadni.
Ugyanis nem mindig lesz vagrant felhasználó létrehozva, valamikor más lesz a felhasználó neve.
Ezt hogy lenne lehetséges?