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

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: test, regex a synchronizace  (Přečteno 2061 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
test, regex a synchronizace
« kdy: 08 Listopadu 2011, 10:16:14 »
Potrebuji synchronizovat dve slozky (Konverze a Precist) a zaroven v pripade, ze v te druhe jsou soubory ktere nejsou v te prvni je (z te druhe ) smazat.

Cele to komplikuje fakt, ze se v ramci Konverze -> Precist se  provadi kopirovani (symlinku)  a zaroven konverze nekterych vybranych souboru na txt. Dalsi jobovka je ze pripona souboru muze mit promenou delku (tipicky 3 - 4 znaky).


Priklad:

/home/jakub/Knihy/Precist/aaa/Hetesa, Petr - Demoni jsou vecni.docx (symlink) ->  /home/jakub/Knihy/Konverze/aaa/Hetesa, Petr - Demoni jsou vecni.txt (vysledny zkopirovany a prevedeny soubor)

Potrebuji nejak osetrit situaci (smazat soubor ve slozce Konverze) v pripade, ze neexistuje symlink ve slozce Precist.

Zkousel jsem tuto podminku, ale nejak se nedokazu vyporadat s tim, ze dochazi ke zmene pripony. A jelikoz muze byt pripona promena (doc, docx, rtf, odt, ...) tak uz nejak nevim jak na to.

Kód: [Vybrat]
F="/home/jakub/Knihy/Precist/aaa/Hetesa, Petr - Demoni jsou vecni.docx"
if [ -e "`echo "${F%.*}"* | sed 's#Precist#Konverze#'`" ]
then echo "Existuje v Konverze"
else echo "Neexistuje v Konverze"
fi
« Poslední změna: 08 Listopadu 2011, 10:19:31 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:test, regex a synchronizace
« Odpověď #1 kdy: 08 Listopadu 2011, 12:03:21 »
Tak jsem castecne pokrocil a skutecne mi to hleda ty soubory co jsou uz smazane jen to hazi spoustu chybovych hlasek. Nekde jsem asi zapomel uvozovky ci co. Poradi nekdo? Uz mi z toho trochu hrabe.

Kód: [Vybrat]
VSTUP="/home/"$USER"/Knihy/Precist/"
VYSTUP="/home/"$USER"/Knihy/Konverze/"
CYBOOK="/media/Cybook Gen3/eBooks"

find  "$VYSTUP" -type f | while read F
do
G=`echo "${F%.*}" | sed "s#Konverze#Precist#"`
if [ ! -e "${G%.*}"* ]
then
echo "#############"
echo "$G"
echo "Soubor nexistuje"
echo "#############"
fi
done

Kód: [Vybrat]
bash: [: příliš mnoho argumentů
bash: [: příliš mnoho argumentů
bash: [: příliš mnoho argumentů
bash: [: příliš mnoho argumentů
bash: [: příliš mnoho argumentů
bash: [: /home/jakub/Knihy/Precist/Sága sedmi sluncí/Anderson K.J. - Sága sedmi sluncí 1 - Skrytá říše.doc: očekáván binární operátor
bash: [: /home/jakub/Knihy/Precist/Sága sedmi sluncí/Anderson K.J. - Sága sedmi sluncí 1 - Skrytá říše.doc: očekáván binární operátor
#############
/home/jakub/Knihy/Precist/Odkaz na Effinger M. A/Effinger_Marid_Audran-1-Kdyz_pritazlivost_selze
Soubor nexistuje
#############
#############
/home/jakub/Knihy/Precist/Odkaz na Effinger M. A/Effinger_Marid_Audran-2-Ohen_ve_slunci
Soubor nexistuje
#############
#############
/home/jakub/Knihy/Precist/Odkaz na Effinger M. A/Effinger_Marid_Audran-3-Polibek_vyhnanstvi.
Soubor nexistuje
#############
#############
/home/jakub/Knihy/Precist/Odkaz na Merle, Robert - Malevil
Soubor nexistuje
#############
bash: [: příliš mnoho argumentů
bash: [: příliš mnoho argumentů

V priloze vypisy (find z adresare "$VSTUP" a "$VYSTUP")

[attachment deleted by admin]
"Pouze text v MS Wordu je opravdu čistý, příteli."

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:test, regex a synchronizace
« Odpověď #2 kdy: 08 Listopadu 2011, 12:33:15 »
Uz asi chapu to prislovi "Rano moud...." mel jsem se na to vyspat. Reseni je trivialni. Omylem jsem dvakrat osekal soubory o pripony a u tech ktere v nazvu obsahovali dve .. se to projevilo. Nalsedujici podminka uz funguje.

Jeste na zaver bych se rad zeptal jak to prepsat abych nemusel pouzivat dve promene tedy zapracovat ty substituce a expanze primo do if [ ]?


Kód: [Vybrat]
find  "$VYSTUP" -type f | while read F
do
G=`echo "${F%.*}" | sed "s#Konverze#Precist#"`
if [ ! -e "$G"* ]
then
echo "#############"
echo "$G"*
echo "Soubor nexistuje"
echo "#############"
fi
done
"Pouze text v MS Wordu je opravdu čistý, příteli."

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:test, regex a synchronizace
« Odpověď #3 kdy: 08 Listopadu 2011, 20:03:07 »
Kód: [Vybrat]
G=`echo "${F%.*}" | sed "s#Konverze#Precist#"`
tady je problém, že ti sed může změnit ten řetězec i v názvu souboru (pokud se tam objeví)

Kód: [Vybrat]
if [ ! -e "$G"* ]
tady je probém, že "$G"* ti může expandovat na více souborů. Pak to háže chybu. Nebo může expandovat na řetězec '$G*'.

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:test, regex a synchronizace
« Odpověď #4 kdy: 09 Listopadu 2011, 06:17:37 »
Dekuji za pripominku ohledne problemu pri expanzi. S ohledem na to, ze se jedna o nazvy knih a mam je pouze v jednom formatu to vadit nebude.

Jediny zadrhel by mohl nastat v pripade, ze by ve stejne slozce byla slozka se stejnym nazvem jako ma soubor bez pripony -> "bash: [: příliš mnoho argumentů". Coz se asi take nestane.

Takze suma sumarum pro me ucely tj. synchronizaci a konverzi knih to postacuje.

Dekuji za radu a z me strany bych to povazoval za uzavrene.

"Pouze text v MS Wordu je opravdu čistý, příteli."

 

Provoz zaštiťuje spolek OpenAlt.