Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Michal Švarc

Stran: 1 2 3 [4] 5
46
 :o ... Petře díky, něco takového jsem prostě nečekal  ... myslím že si na noc vezmu man awk, přesně to jsem potřeboval - teď už jen pochopit jak to funguje

a díky i ostatním za snahu




47
Tak tohle, minimálně v konzoli funguje...
Kód: [Vybrat]
RADKY=('0' `grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'` `wc -l DB*.sql | awk '{print $1}'`)

48
Vývoj / Rozsekání souboru ve skriptu
« kdy: 07. 01. 2015, 05:48:40 »
Pokud jde o konzoli, vpodstatě si vypíšu seznam řádků podle nichž by se měl soubor rozsekat.
Kód: [Vybrat]
grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'

Zjistím kolik řádků soubor má:
Kód: [Vybrat]
wc -l DB*.sql | awk '{print $1}'

A začnu rozsekávat (např):
Kód: [Vybrat]
head -n $((6466-2)) *sql | tail -n $((6466-6439+1)) > tabulka.sql

Rád bych si to ale převedl do scriptu, který by tu práci dělal za mě.

Pojmenování souborů:
Kód: [Vybrat]
grep -n 'Table structure for table' DB*.sql | awk '{print $6}' | tr -d "\`"

Rád bych pochopil, jakým způsobem mohu toto převést do shellového scriptu.
Tak nějak si představuji, že bych začátek souboru, seznam řádků a poslední řádek, načetl do pole. Názvy souborů do druhého pole, a pak patrně pomocí while prováděl ořez.

Jen mi zatím není jasné jak to provést.
mělo by fungovat cca toto
Kód: [Vybrat]
RADKY=(`ls`)
bude to ale fungovat i s rourou?
tedy
Kód: [Vybrat]
RADKY=(`grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'`)
a co teprv přidávání více záznamů (tohle asi fungovat nebude, že?)
Kód: [Vybrat]
RADKY=(0 `grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'` `wc -l DB*.sql | awk '{print $1}'`)
zatím jsem to nezkoušel a pročítám fóra

49
Software / Re: Bashov skript - kde je chyba?
« kdy: 17. 03. 2011, 01:04:58 »
No jinak jsem si vsiml jeste jedne veci, to ls *.cokoli na mym stroji vypisuje soubory do nekolika sloupcu vedle sebe, ... nebo pouzit find
ano ls vypisuje do více sloupců, ale když zadáš ls > ls.txt , tak v tom souboru budou každý na novém řádku
ano, find je podle všeho lepší volbou, jistý 'Thomas M' tu dokonce psal cosi o nefukčnosti pro enormní počty souborů

Kód: [Vybrat]
#!/bin/bash

find  -regextype posix-egrep -iregex ".*[.](avi|mkv|mp4|wmv|divx|mpg|mpeg)" \
      -exec sh $HOME/Dokumenty/ScriptyBASH/vcs-1.12.2.sh -n 21 -c 3 -H160 '{}' \;
Tak na tohle zírám a nedostává se mi slov. Díky

50
Software / Re: Bashov skript - kde je chyba?
« kdy: 15. 03. 2011, 13:03:34 »
Nějak nechápu, proč to děláš tak složitě. Zkusím to trochu zjednodušit:
...
Tohle by mělo fungovat. Proč vlastně vytváříš ty pracovní soubory? Jde to i bez nich.
zjednodušení je fajn a funguje stejně  :) - bohužel z nějakého mě neznámého důvodu načítá pouze první řádek - když zakomentuju řádek s sh příkazem a napíšu místo toho "vypsat řádek", tak vypíše všechny

začal jsem s tím takhle.

jednou z možností bylo, zkopírovat ten cyklus mnohokrát, pro každou příponu, což jsem si ale říkal, že to musí jít jinak lépe. Nepodařilo se mi s tím vypořádat bez pracovního souboru (potíže s mezerama), tak to zkouším takhle.
Prvni skript je v bashi a druhy je v cem? Volas tam 'sh', ja bych typoval ze tam taky chces volat 'bash'. Ten shell skript .sh to tedy provede jen jednou? Jaka je navratova hodnota? Co ten skript dela? Provede ho to do konce nebo jen z casti?

Podle me to vypada ze ten skript vrati nenulovou navratovou hodnotu a to tvuj skript ukonci, chtelo by to tohle ve tvem skriptu zakazat, ale ja to umim jen zapnout (set -e), nevim jak to vypnout.

Jinak pro debug doporucuju hned na zacatku bash skriptu napsat 'set -x', hezky to vypisuje ktere prikazy se zrovna provadi.
ten script mi poradili tady
chceš-li můžeš se na něj podívat tady

ale i tak, druhý script volá #!/usr/bin/env bash
a výpis se set -x:
Kód: [Vybrat]
miki@ip-94-113-122-100:/Disks/Sdb/Videa> sh ~/Dokumenty/ScriptyBASH/pokus.sh
+ zapis=./zapis.txt
+ zapisOld=./zapisOld.txt
+ zapisBackUp=./zapisBackUp.txt
+ '[' -e ./zapis.txt ']'
+ find . -maxdepth 1 -iname '*.avi' -or -iname '*.mkv' -or -iname '*.mp4' -or -iname '*.wmv' -or -iname '*.divx' -or -iname '*.mpg' -or -iname '*.mpeg'
+ read line
+ sh /home/miki/Dokumenty/ScriptyBASH/vcs-1.12.2.sh -n 21 -c 3 -H160 './video.mkv'
Video Contact Sheet *NIX v1.12.2, (c) 2007-2010 Toni Corvera
Processing ./video.mkv...
Detected video length can't be reached. Safe measuring enabled.
Starting safe length measuring (this might take a while)...
   ... trying 293.579
Capturing in range [00:13.21-04:37.43]. Total length: 04:53.58
Generating capture #1/21 (00:13.21)...
Very small timestamps in use. Disabling them with -dt might be preferable
Generating capture #2/21 (00:26.42)...
...
Generating capture #21/21 (04:37.43)...
Composing standard contact sheet...
Adding header and footer...
Done. Output wrote to video.mkv-2.png
Cleaning up...
+ sleep 1s
+ read line
+ mv ./zapis.txt ./zapisBackUp.txt

Á zatímco píšu:

Mam podezreni, ze problem je podobny tomuto: http://www.abclinuxu.cz/poradna/programovani/show/330284
Zkuste presmerovat stdin na /dev/null:
sh $HOME/Dokumenty/ScriptyBASH/vcs-1.12.2.sh -n 21 -c 3 -H160 "$line" < /dev/null
je to trochu zvláštní, ale je to tak - no faktem je, že ten vcs script ke své práci volá ffmpeg, nebo mplayer

51
Software / Bashov skript - kde je chyba?
« kdy: 15. 03. 2011, 01:36:00 »
Kód: [Vybrat]
#!/bin/bash

zapis="./zapis.txt";
zapisOld="./zapisOld.txt";
zapisBackUp="./zapisBackUp.txt";


if [ -e "$zapis" ]
  then
   cp $zapis $zapisOld
   rm $zapis
fi

pripony=( avi mkv mp4 wmv divx mpg mpeg )

for ((i=0;i<7;i++))
do

 if [ -e "$zapis" ]
  then
   ls *.${pripony[$i]} >> $zapis 2>/dev/null
  else ls *.${pripony[$i]} > $zapis 2>/dev/null
 fi

done

while read line   
do

#  sh ~/Dokumenty/ScriptyBASH/vcs-1.12.2.sh -n 21 -c 3 -H160 "$line"
  sleep 1s
  echo $line

done <$zapis

cp $zapis $zapisBackUp
rm $zapis
V sekundových intervalech vypisuje jednotlivé řádky ze souboru co si vytvoří, ale když to změním takhle:

Kód: [Vybrat]
...
  sh ~/Dokumenty/ScriptyBASH/vcs-1.12.2.sh -n 21 -c 3 -H160 "$line"
  sleep 1s
#  echo $line
...
spustí se mi daný program jen jednou

52
Software / Re: Jak na miniatury v mplayeru?
« kdy: 14. 03. 2011, 03:13:34 »
Zajímavý příkaz jsem objevil tady:

mplayer -benchmark -nosound -quiet -zoom -vf scale=420:-3,tile=2:2 -vo jpeg:outdir=. -sstep 60 file.avi

53
Software / OCR na hardsub z AVI videa
« kdy: 09. 03. 2011, 09:40:09 »
Nějaký tip na OCR pro vytáhnutí hardsub titulků z avi kontejneru?

54
Software / Re: Skripty a mezery v názvech souborů
« kdy: 10. 02. 2011, 10:42:18 »
Co bych měl udělat, když mám mezery v názvech souborů

existuji program detox, ktery tyhle k0k0t1ny prevadi na "normalni" nazvy souboru.
Ano, jedna z možností, je převod jmen souborů, ale netvrď mi, že to jinak nejde

55
Software / Re: Skripty a mezery v názvech souborů
« kdy: 10. 02. 2011, 01:03:56 »
A jsem tu zas. Udělal jsem uvedený script 4x pro různé přípony, načež si říkám, musí to přece jít zjednodušit.

Přez různé pokusy, jsem se dostal do takovéhle fáze:
Kód: [Vybrat]
#!/bin/bash

breakFile=""
falseHlaska="Soubor se nepodařilo opravit"

for videoFile in `ls *.mkv *.mp4 *.avi *.wmv 2>/dev/null`
do
  if [ -e "$1$videoFile" ]
    then
        if [ "$breakFile" != "" ]
           then
                echo ""; echo "$falseHlaska"
                breakFile=""
        fi     
       echo "videosoubor ok: '$1$videoFile'"   
       vcs -O bg_sign=black -O bg_contact=silver -O fg_heading=black -H 100 -c 4 -i 250s -j -n 24 "$1$videoFile"
       else echo -n "k opravě: $videoFile ;"
            if [ "$breakFile" = "" ]
              then breakFile="$videoFile"           
            else breakFile="$breakFile $videoFile"
            fi
            if [ -e "$1$breakFile" ]   
              then
                 echo ""     
                 echo "opravený soubor: $breakFile"
                 vcs -O bg_sign=black -O bg_contact=silver -O fg_heading=black -H 100 -c 4 -i 250s -j -n 24 "$1$breakFile"
                 breakFile=""
            fi
  fi     

done

if [ "$breakFile" != "" ]
   then
           echo "";echo "$falseHlaska"
           breakFile=""
fi         

což sice funguje i s mezerami, ale nedokážu tím vyřešit situaci, kdy jich je víc vedle sebe

56
Software / Re: Jak na miniatury v mplayeru?
« kdy: 05. 02. 2011, 12:01:09 »
Ale vraťme se k mplayeru a původnímu dotazu. Podle mě by bylo potřeba:
1) Vytvořit dostatečně velký podklad - není problém vzít obrázek z filmu a upravit na požadovaný rozměr
2) zapsat tam informace o filmu (opravdu netuším jak, navíc by v rámci čitelnosti chtělo dát nějaký podklad a nastavit font i barvu textu)
3) vytvořit a zapsat tam 'fotoindex' (miniatury) filmu - není problém je vytvořit (stejně jako podklad), horší je, zapsat to do podkladového obrázku (navíc každou jinam, aby byly vedle sebe)
-----
takže vlastně největší problém je s vkládáním informací a obrázků do obrázku (nejlépe přez mplayer)

57
Software / Re: Jak nalézt soubory v adresáři
« kdy: 04. 02. 2011, 23:19:32 »
$ ls *.+(mkv|avi)
bash: chyba syntaxe poblíž neočekávaného tokenu „(“

Clovece na co je ti ten man? Co zkusit: -maxdepth 0?
A k čemu je tobě? Jak už psal před tebou kit, musí tam být -maxdepth 1. S nulou to nenajde nic.

Kód: [Vybrat]
find "$1" -maxdepth 1 -name \*.mkv -o -name \*.avi \
      -exec vcs -O bg_sign=black -O bg_contact=silver -O fg_heading=black \
            -H 100 -c 4 -i 250s -j -n 24 '{}' \;
Díky

58
Software / Re: Jak nalézt soubory v adresáři
« kdy: 04. 02. 2011, 00:18:12 »
No dobrá, funguje i toto:
find -type f -name \*.avi -o -name \*.mkv
(jen člověk nesmí zapomínat na to že to hledá i rekurzivně)

59
Software / Který manuál hledám?
« kdy: 03. 02. 2011, 10:28:32 »
Man: find all matching manual pages (set MAN_POSIXLY_CORRECT to avoid this)
 * egrep (1)
   egrep (1+)
Man: Kterou manuálovou stránku si přejete?

nebo:
 * grep (1)
   grep (1+)
   grep (1p)

to si mám přečíst nejlépe všechny, nebo existuje nějaký postup, který mi řekne který hledám?

PS: zatím jsem používal 1

60
Tak jo, děkuji všem za rady.

Šlo mi o to, dosadit vhodný příkaz (z manuálů se těžko hledá vhodný, když některé příkazy vůbec neznáte) do scriptu tak aby nemusel být pro každou příponu nový cyklus.

Díky tomu jsem zjistil, že find i ls a egrep asi ne, protože tam jaksi zůstávají i adresáře (nehledě na to, že druhý z uvedených z jakéhosi důvodu vypisuje i soubory typu .mkv.jpg atp.)

Jediný funkční tedy zůstává ls *.{mkv,avi}, ještě že nemám tisíce souborů v jednom adresáři (mám max. 500)

Stran: 1 2 3 [4] 5