Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
World of Warcraft

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: script pro vysavač  (Přečteno 5694 krát)

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
script pro vysavač
« kdy: 18 Květen 2016, 16:31:42 »
Zdravím. Zjistil jsem,že náš robotický vysavač běží na linuxu a lze upravovat parametry pomocí jednoduchých scriptů.
Kód: [Vybrat]
#!/bin/sh
#IS_HIT_UPDATE_SCRIPT=1

SOURCE_PATH="/mnt/usb"
 
# Pocitani robota 1-3
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_1.snd
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_2.snd
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_3.snd

# Kopirovani novych paramteru do robota
cp "$SOURCE_PATH"/SND_CLEANING_ZIGZAG.snd /usr/SNDDATA/SND_CLEANING_ZIGZAG.snd
 
# Pocitani robota 3-1
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_3.snd
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_2.snd
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NUM_1.snd
 
exit
tento náhrada zvuku za vlastní. Bohužel je pro jiný soubor nutné přepisovat script zvlášť a tak jsem se pustil do univerzálního a zasekl jsem se na proměnných,které nedělají co bych čekal.
Můj script
Kód: [Vybrat]
#!/bin/sh
#IS_HIT_UPDATE_SCRIPT=1

#Zjistí vkládaný soubor
FILE=$(ls -F | grep -v / | grep -v sh);
echo $FILE
#zjistí cestu k původnímu
cd ./usr
CESTA= find | grep -i $FILE
echo ${CESTA}
#cd ..
#zkopíruuje soubor do umístění
cp -f ../${FILE} ${CESTA} #nezkopíruje chybí název cílového souboru
cp -f ../${FILE} ./SNDDATA/find.txt #zkopíruje
exit 0
Proměnná CESTA ale při tom obsahuje totéž,tedy ./SNDDATA/find.txt  find.txt je soubor,který se snažím kopírovat.
pro úplnost výpis z konzole.
Kód: [Vybrat]
tomas@tomas-Ubuntu:~/Stažené/vysavac/backup$ ./uniupdate.sh
find.txt
./SNDDATA/find.txt
Poradí prosím někdo? Díky
« Poslední změna: 18 Květen 2016, 16:37:05 od rejže »
Acer Switch alpha12 core i3,128GB ssd

ntz_reloaded

  • Lokaj
  • Moderátor
  • Závislák
  • *****
  • Příspěvků: 3660
  • Karma: +360/-65535
  • skill :: ur home erly
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #1 kdy: 18 Květen 2016, 18:16:28 »
to mas spatne cele .. nechapu presne ceho snazis docilit, ale v tom skriptu je v podstate spatne kazdej radek takze tezko rict ...

snad jen ze

``neco= nejakej_prikaz'' rozhodne nepriradi do te promenne vystup z toho prikazu, eg v tom tvem vystupu je `find.txt' vystup primo echo $FILE a ten dalsi radek vystup rovnou z find, protoze CESTA je logicky prazdna

prosim pouzivej na zacatku skriptu debug mod abys chapal co to dela ... to se dela pomoci set -x ... potom to bude vypisovat podrobnej trace ... kdyz pouzijes:

exec 2>/tmp/$(basename $0).debug
set -x


tak to bude lejt ten vystup do souboru (viz vyse - je to priklad, muzes tam napsat treba samozrejme /tmp/fuj a vystup bude v /tmp/fuj)
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #2 kdy: 18 Květen 2016, 19:32:05 »
při update vysavače je v kořeni flashky soubor kterým chci nahradit ten původní ve vysavači. Viz první skript,kde je pouhé kopírování s pevně daným souborem a pevně danou cestou kam ten soubor patří. Chci docílit  toho aby update skript přečetl název souboru,který je s ním na té flashce,našel ho v systému vysavače a nahradil. Po opravě,že mě to netrklo hned,už to funguje jak má.
Kód: [Vybrat]
#!/bin/sh
#IS_HIT_UPDATE_SCRIPT=1

#Zjistí vkládaný soubor
FILE=$(ls -F | grep -v / | grep -v sh);
echo $FILE
#zjistí cestu k původnímu
cd ./usr
CESTA=$(find | grep -i $FILE);#opravený řádek
echo ${CESTA}
#cd ..
#zkopíruuje soubor do umístění
cp -f ../${FILE} ${CESTA}
exit 0

Ještě musím zkusit ošetřit,když nebude soubor nalezen a přidat zvukové hlášky zda to proběhlo dobře,nebo s chybou. Jiná zpětná vazba než hlasový výstup to nemá.
Každopádně dík za upozornění,že CESTA je prázdná.
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #3 kdy: 18 Květen 2016, 19:34:03 »
Něco se mi podařilo spatlat. :D Je to teda předělané, ale funguje to.
Kód: [Vybrat]
#!/bin/sh
#IS_HIT_UPDATE_SCRIPT=1

find . -maxdepth 1 -type f -not -regex '.*\.sh' | sed 's|^\./||' | while read SRC # find new files
do # for each file
  echo "source file: $SRC"
  DST=$(find ./usr -name "$SRC" | head -n 1) # where to copy the file
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # go to next file
  fi
  echo "destination file: $DST"
  cp -f "./${SRC}" "${DST}" # copy the new file over the old file
done

exit 0
Vysvětlení:
Kód: [Vybrat]
find . -maxdepth 1 -type f -not -regex '.*\.sh' | sed 's|^\./||' | while read SRC
  • find – příkaz pro vypsání souborů
  • . – aktuální adresář
  • -maxdepth 1 – hledat jen v aktuálním adresáři (hloubka 1)
  • -type f – jen soubory
  • -not -regex '.*\.sh' – všechny soubory, které nemají koncovku .sh
  • | sed 's|^\./||' – předá výstup findu do sedového skriptu, který odstraní z cest "./"
  • | while read SRC – postupně čte výstupní řádky ze sedu, jednotlivé názvy souborů dává postupně do smyčky
Kód: [Vybrat]
DST=$(find ./usr -name "$SRC" | head -n 1)Tohle najde soubor ve složce usr, co se jmenuje stejně jako vyhledaný soubor. Vezme jenom první nalezený.
Zbytek by měl být jasný.
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #4 kdy: 18 Květen 2016, 20:48:00 »
To vypadá zajímavě. Určitě zkusim,když je tam ošetřená chyba. Jinak jsem zjistil,že má v sobě i ovladač pro wifi dongle a na německým fóru jsem našel návod jak to zprovoznit. Zítra má manželka ten vysavač dostat k narozeninám,tak jsem ho naučil se představit a popřát jí všechno nejlepší.  ;) No zjistil jsem,že to bude nakonec hračka i pro mě.
EDIT: Je to super,jelikož to zvládne i víc souborů,ale soubory s koncovkou .sh to nevynechává. Zkouším najít proč,ale zatím nic.
EDIT: Tak jsem na to přišel
Kód: [Vybrat]
find . -maxdepth 1 -type f -not -regex '.*\.sh' | sed 's|^\./||' | while read SRC
Kód: [Vybrat]
find . -maxdepth 1 -type f -not -iregex '.*\.sh' | sed 's|^\./||' | while read SRCZatím to mám vyzkoušený na kompu na kopii souborů z vysavače. Ještě to musím upravit,protože ve skriptech pro vysavač se ukládá proměnná SOURCE_PATH="/mnt/usb" ,ale to už snad bude dobrý. Jestli umí luxík všechny příkazy co v tom skriptu jsou,tak půjde šmahem vyměnit několik hlasových souborů najednou.
Ještě jednou díky.
« Poslední změna: 18 Květen 2016, 22:14:02 od rejže »
Acer Switch alpha12 core i3,128GB ssd

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • *****
  • Příspěvků: 4934
  • Karma: +347/-11
    • Zobrazit profil
    • Lomítkáři
Re:script pro vysavač
« Odpověď #5 kdy: 18 Květen 2016, 21:55:32 »
Teda ... tohle je zajímavé vlákno ... :D :D :D
Trochu mi to připomíná, když syn dostal mašinky ... chjo, jsem si hrál do 4 do rána ...
Registered Linux user #421281
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #6 kdy: 18 Květen 2016, 22:29:48 »
EDIT: Je to super,jelikož to zvládne i víc souborů,ale soubory s koncovkou .sh to nevynechává. Zkouším najít proč,ale zatím nic.
To je divný, mně (už spím) to normálně funguje. Možná nějaká nekompatibilita? Mně funguje i s busyboxovou verzí findu.
Kód: [Vybrat]
$ find
.
./test.sh
./usr
./usr/hahaha
./usr/hahaha/c.txt
./usr/a.txt
./usr/a.sh
./b.txt
./hahaha
./a.txt
./c.txt
./a.sh
$ ./test.sh
source file: b.txt
no destination found!
source file: a.txt
destination file: ./usr/a.txt
source file: c.txt
destination file: ./usr/hahaha/c.txt
Zítra se na to podívám.
Ten vysavač mi připomíná moje aktuální hraní s dronem... dostal jsem sice jednou malého linuxového drona jako dárek, ale nemám mobil s Androidem (tenkrát jsem měl) a BLE (to už tenkrát ne, ale má ho spolužák :D ) a tak jsem náhodou našel jak programovat v céčku přímo drona pomocí oficiálního vzdělávacího firmware. Kam se hrabou některé jiné zájmové aktivity... Zatím naštěstí nikdo nezemřel a nikdo jiný než já nebyl zraněn :D
« Poslední změna: 18 Květen 2016, 22:35:46 od Jakub Vaněk »
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #7 kdy: 18 Květen 2016, 23:08:34 »
Už mi to funguje,ale musel jsem dát -iregex.
Acer Switch alpha12 core i3,128GB ssd

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #8 kdy: 19 Květen 2016, 23:46:34 »
Je podarovano a musím říct,že přání k narozeninám od vysavače zapůsobilo. Já jsem zvědav co do něj dostanu za vylepšení.  8)
Acer Switch alpha12 core i3,128GB ssd

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #9 kdy: 21 Květen 2016, 03:27:46 »
Tak ten zajímavej skript vysavač bohužel nevezme. Asi mu něco chybí v busyboxu. No budu koumat dál a zatim používat ten můj paskvil. Debug log jsem tam dal,takže sem pak dám výpis.
Takže toto mi vyhodí :
Kód: [Vybrat]
+ aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NOTICE_UPDATE_START.snd
Playing raw data '/usr/SNDDATA/SND_NOTICE_UPDATE_START.snd' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
+ cd /mnt/usb
+ sed 's|^\./||'
+ find . -maxdepth 1 -type f -not -iregex '.*\.sh'
+ read SRC
BusyBox v1.6.1 () multi-call binary

Usage: find [PATH...] [EXPRESSION]

Search for files in a directory hierarchy.  The default PATH is
the current directory; default EXPRESSION is '-print'

EXPRESSION may consist of:
-follow Dereference symlinks
-name PATTERN File name (leading directories removed) matches PATTERN
-print Print (default and assumed)
-print0 Delimit output with null characters rather than
newlines
-type X Filetype matches X (where X is one of: f,d,l,b,c,...)
-perm PERMS Permissions match any of (+NNN); all of (-NNN);
or exactly (NNN)
-mtime DAYS Modified time is greater than (+N); less than (-N);
Or exactly (N) days
-mmin MINS Modified time is greater than (+N); less than (-N);
or exactly (N) minutes
-newer FILE Modified time is more recent than FILE's
-inum N File has inode number N
-exec CMD Execute CMD with all instances of {} replaced by the
files matching EXPRESSION
-user NAME File is owned by user NAME (numeric user ID allowed)
-group NAME File belongs to group NAME (numeric group ID allowed)
-depth Process directory after traversing it
-size N File size is N
-prune Stop traversing current subtree
-path Path matches PATTERN
(EXPR) Group an expression

+ aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NOTICE_UPDATE_END.snd
Playing raw data '/usr/SNDDATA/SND_NOTICE_UPDATE_END.snd' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
+ exit 0
Zjevně tedy příkazu find v řádku "DST=$(find ./usr -name "$SRC" | head -n 1)" něco chybí. Problém bude v té proměnné. V ubuntu to chodí normálně,ale vysavač to nedá.
« Poslední změna: 24 Květen 2016, 11:23:55 od rejže »
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #10 kdy: 25 Květen 2016, 19:46:25 »
Zdravím a omlouvám se za pauzu, byl jsem na školním výletě. Příkaz find je v tomhle busyboxu evidentně osekaný – nemá ani regexy. Tohle by mohlo fungovat:
Kód: [Vybrat]
#!/bin/sh

find . ! -name . -prune -type f | sed '/^.*\.sh$/d;s/^\.\///' | while read SRC # find new files
do # for each file
  echo "source file: $SRC"
  DST=$(find ./usr -name "$SRC" | head -n 1) # where to copy the file
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # go to next file
  fi
  echo "destination file: $DST"
  cp -f "./${SRC}" "${DST}" # copy the new file over the old file
done

exit 0
Aktualizovaný rozbor:
Kód: [Vybrat]
find . ! -name . -prune -type f | sed '/^.*\.sh$/d;s/^\.\///' | while read SRC # find new files
  • find – příkaz pro vypsání souborů
  • . – aktuální adresář
  • ! -name . -prune – tohle jsem našel jako alternativu k -maxdepth 1, vyloučí to podsložky
  • -type f – vypisovat jen soubory, ne složky a odkazy
  • | sed '/^.*\.sh$/d;s/^\.\///' – vyhodí shell skripty a odstraní ./
    • /^.*\.sh$/d – vyhodí soubory končící na .sh
    • ; – oddělovač příkazů
    • s/^\.\/// – odstraní ./ z názvu souboru
  • | while read SRC – předává postupně názvy souborů do smyčky
  • # find new files – komentář
EDIT: odstranil jsem ten komentář „#IS_HIT_UPDATE_SCRIPT=1“, protože pokud skript nečte nějaký ověřovací automat, není potřeba.
« Poslední změna: 25 Květen 2016, 19:48:58 od Jakub Vaněk »
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #11 kdy: 26 Květen 2016, 01:03:57 »
Díky. Určitě zkusim. Musim se v tomhle taky trochu dovzdělat. Je to zajímavý, ale chce to dost času. Zatím jsem cvakal jen sledy příkazů, který mi sice vždycky posloužily, ale většinou to nestačí.
Acer Switch alpha12 core i3,128GB ssd

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #12 kdy: 28 Květen 2016, 17:51:46 »
Tak to neklaplo. předtím jsem zkusil zaměnit tenhle příkaz za ten svůj řádek s příkazem ls a dopadlo to stejně jako teď,tj. nefunguje to a navíc to ani nezapíše debug,takže vůbec nevím proč to nejde. Přijde mi ale,že problém nastane až při druhém find,nebo se nenačte proměnná SRC. Smyčky by ale fungovat měly. Ve skriptech z německých stránek je smyčka FOR. Začal jsem teď studovat tohle: http://www.abclinuxu.cz/clanky/navody/bash-i
tak se snad někam časem posunu.
« Poslední změna: 28 Květen 2016, 17:56:22 od rejže »
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #13 kdy: 28 Květen 2016, 18:42:17 »
Tak leda že by to bylo tím negačním vykřičníkem u prvního findu. Ten druhý find by měl fungovat.
Tohle je tedy verze s ls místo findu:
Kód: [Vybrat]
#!/bin/sh

ls -AF | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d' | while read SRC # find new files
do # for each file
  echo "source file: $SRC"
  DST=$(find ./usr -name "$SRC" | head -n 1) # where to copy the file
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # go to next file
  fi
  echo "destination file: $DST"
  cp -f "./${SRC}" "${DST}" # copy the new file over the old file
done

exit 0
Tohle jsem splácal místo toho:
Kód: [Vybrat]
ls -AF | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d'
  • ls -AF – vypíše obsah adresáře i s typem souborů
  • | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d'dekódování kvalifikátoru a úprava
    • /\(\/\|=\||\|>\)$/d; – vyhodí adresáře, roury, sockety a doory
    • s/\(\*\|@\)$//; – u spustitelných souborů a symbolických odkazů odstraní kvalifikátor (to je to "/" a "@")
    • /\.sh$/d – vyhodí shellové skripty
PS: mě tenhle dotaz taky docela vzdělává, není to tak, že bych předtím nějak extra ovládal sed ;)
« Poslední změna: 28 Květen 2016, 18:44:54 od Jakub Vaněk »
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #14 kdy: 28 Květen 2016, 18:59:05 »
Tak opět to ani debug nezapsalo. Teď se seznamuji s příkazem "xargs" ,že bych jím zkusil nahradit tu smyčku. Mám pocit,že nude problém tam.
Tady je příklad použití xargs,který vytvoří seznam vybraných souborů z aktuálního adresáře a vloží je do souboru.
Kód: [Vybrat]
find . -maxdepth 1 -type f | grep bas | grep -v zip | sed 's|^\./||' | xargs -i echo {} > ./vysavac/seznam.txt
« Poslední změna: 28 Květen 2016, 19:07:49 od rejže »
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #15 kdy: 28 Květen 2016, 20:52:28 »
A nevypisuje to nic ani když po shebangu (#!/bin/sh) dáš to set -x?
Kód: [Vybrat]
#!/bin/sh
set -x

ls -AF | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d' | while read SRC # find new files
do # for each file
  echo "source file: $SRC"
  DST=$(find ./usr -name "$SRC" | head -n 1) # where to copy the file
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # go to next file
  fi
  echo "destination file: $DST"
  cp -f "./${SRC}" "${DST}" # copy the new file over the old file
done

exit 0
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #16 kdy: 29 Květen 2016, 11:35:51 »
Nevypisuje. Připadá mi,že když se zfunkční ten řádek co řešíme,tak to narazí na něco co to úplně zmate. Každopádně hlášky aplay proběhnou obě. Jediný co mne napadá,že to pak nezapíše na flashku,ale někam jinam.
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #17 kdy: 29 Květen 2016, 12:16:18 »
Asi už jsem na stopě. Po projití celého vlákna jsem došel k tomu, že ten skript není v kořeni / (s tím jsem počítal). Teď ten skript bere soubory z určitého adresáře (první argument, může to být i to /mnt/usb) do určitého adrešáře (to může být třeba /usr).
Kód: [Vybrat]
#!/bin/sh

if [ "$#" -ne 2 ]; then
  echo "error: wrong number of arguments"
  echo "usage: $(basename $0) <source directory> <destination directory>"
  exit 1
fi

SRC_DIR="$1"
DST_DIR="$2"

ls -AF "$SRC_DIR" | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d' | while read SRC # find new files
do # for each file
  echo "source file: $SRC"
  DST=$(find "$DST_DIR" -name "$SRC" | head -n 1) # where to copy the file
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # go to next file
  fi
  echo "destination file: $DST"
  cp -f "$SRC_DIR/${SRC}" "${DST}" # copy the new file over the old file
done

exit 0
« Poslední změna: 29 Květen 2016, 12:18:23 od Jakub Vaněk »
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #18 kdy: 29 Květen 2016, 12:42:31 »
Napadlo mě ještě jedno alternativní velmi jednoduché řešení: udělat si v nějaké složce adresářový strom s náhradami souborů a pak jen použít:
Kód: [Vybrat]
cp -rf /cesta/ke/zdroji/* /cesta/k/cíli/Netrpí to problémem s různými stejně nazvanými soubory.
Příklad:
  • /mnt
    • /bin/bar.sh
    • /share/audio/foo.wav
  • /usr
    • /bin
      • /pidof
      • /at
    • /share
      • /audio
        • /foo.wav
        • /hello.wav
      • /bar/foo.wav
Kód: [Vybrat]
cp -rf /mnt/* /usr-> /mnt/share/audio/foo.wav se nakopíruje do správného místa, do /usr/share/audio/foo.wav
-> /mnt/bin/bar.sh se nakopíruje do /usr/bin/bar.sh (i když předtím neexistoval)
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #19 kdy: 29 Květen 2016, 13:54:37 »
S tim kořenem bych to nevidel.  Do vysavače mám ten skript upravený o proměnnou SOURCE_PATH = /mnt/usb. Tak to používají ve bšech skriptech pro vysavač, tak to radši dodržuju. Pak ten skript vypadá takhle. 
Kód: [Vybrat]
#!/bin/sh
#IS_HIT_UPDATE_SCRIPT=1

SOURCE_PATH="/mnt/usb"
exec 2>"$SOURCE_PATH"/log/$(basename $0).debug
set -x

aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NOTICE_UPDATE_START.snd

cd "$SOURCE_PATH"

ls -AF | sed '/\(\/\|=\||\|>\)$/d;s/\(\*\|@\)$//;/\.sh$/d' | while read SRC # vyhledá nové soubory
do # pro každý soubor
  echo "source file: $SRC"
  DST=$(find /usr -name "$SRC" | head -n 1) # kam kopírovat soubor
  if [ "$DST" = "" ]; then # old file not found
    echo "no destination found!"
    continue # pokračovat dalším souborem
  fi
  echo "destination file: $DST"
  echo "${SOURCE_PATH}/${SRC}" "${DST}" # kopírování do určeného umístění ve vysavači
done
aplay -c 1 -r 16000 -f S16_LE /usr/SNDDATA/SND_NOTICE_UPDATE_END.snd
exit 0

Místo cp dávám echo z opatrnosti, dokud nevim přesně co ten skript provede.
« Poslední změna: 29 Květen 2016, 13:58:12 od rejže »
Acer Switch alpha12 core i3,128GB ssd

Jakub Vaněk

  • Stálý člen
  • ***
  • Příspěvků: 752
  • Karma: +75/-4
    • Zobrazit profil
    • Web programátora a studenta Jakuba Vaňka
Re:script pro vysavač
« Odpověď #20 kdy: 29 Květen 2016, 22:52:57 »
Už mě nic nenapadá. Jedině zkusit zadávat příkazy přímo po jednom. Šlo by to udělat na počítači, první věc je zkopírovat si celý souborový systém (kromě /dev, /sys a /proc) na flešku s oddílem ext4. Pak se přes chroot a qemu-static dostat k shellu a tam to vyzkoušet.
Notebook: Lenovo Thinkpad X200, Xubuntu 16.04

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #21 kdy: 30 Květen 2016, 13:14:38 »
Diky za vsechno.  Bylo to podnetny a zajimavy.  Zkusim jeste cyklus For, pokud to jde podle poctu souboru.  A jinak to budu resit po jednom jako dosud. Kazdopadne je to motivace konkretnim problemem a to me nauc..  ;-)
Btw.  Objednal jsem wifi dongle, tak ne nem zprovoznim wifi a jestli pujde ssh tak to muze byt jeste zajimavy.
« Poslední změna: 30 Květen 2016, 13:19:20 od rejže »
Acer Switch alpha12 core i3,128GB ssd

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #22 kdy: 07 Červen 2016, 02:28:50 »
Tak jsem nainstaloval wlan hack a získal spoustu nových možností. SSH, a hlavne webove rozhrani, ktere nabizi ovladani na displayi možnost editovat některé soubory, spustit režimy které drív neměl a pohled jeho okem. (Má kameru). Mail jsem zatim nerozěhl.
Acer Switch alpha12 core i3,128GB ssd

ntz_reloaded

  • Lokaj
  • Moderátor
  • Závislák
  • *****
  • Příspěvků: 3660
  • Karma: +360/-65535
  • skill :: ur home erly
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #23 kdy: 07 Červen 2016, 12:33:24 »
hmm .... muzes sem dat prosimte odkaz na tu vec, zacal jsem byt docela zvedavej
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

rejže

  • Člen
  • **
  • Příspěvků: 162
  • Karma: +8/-3
    • Zobrazit profil
Re:script pro vysavač
« Odpověď #24 kdy: 07 Červen 2016, 13:48:05 »
Acer Switch alpha12 core i3,128GB ssd