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: if test " or ' [vyřešeno]  (Přečteno 2075 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
if test " or ' [vyřešeno]
« kdy: 24 Března 2013, 11:54:51 »
Potrebuji vytvorit jednoduchy test.

Mel by ve slozce najit vsechny soubory mbp a porovnat jestli v druhe slozce existuje soubor stejneho jmena akorat s priponou txt. Adresarove struktury jsou stejne az na cesty v promenych $CYBOOK a $VYSTUP. Nazvy souboru a slozek mohou obsahovat mezery, "," a dalsi ne zcela bezproblematicke znaky.


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

find  "$CYBOOK" -type f -iname '*.mbp'| while read F
do
if [ ! -e "`echo "${F%.*}" | sed s#"$CYBOOK"#"$VYSTUP"#`.txt" ]
then
echo "Mazu "$F""
#rm -rf "$F"
else
echo "Nemazu"
fi
done

Vysledek - pricemz  soubor /home/jakub/Knihy/Konverze/Zelazny, Roger - Ostrov mrtvých.txt existuje
Kód: [Vybrat]
.
Mazu /media/Cybook Gen3/eBooks/Zelazny, Roger - Ostrov mrtvých.mbp
.

Zkousel jsem skript na jednom zaznamu primitivne odladit, ale vysledek mi prijde v poradku, pritom vlastni skript nefunguje.

Nejak se asi spatne vyhodnoti if test, ale nemohu prijit na to proc.

Edit: jeste jsem zkusil vyzkouset test pro ruzne soubory a vyskedek je jiny nez bych ocekaval. Lisi se pouze ruznymi znaky v nazvu. Oba dva soubory txt existuji.

Kód: [Vybrat]
VSTUP="/home/"$USER"/Knihy/Precist/"
VYSTUP="/home/"$USER"/Knihy/Konverze/"
CYBOOK="/media/Cybook Gen3/eBooks/"
F="/media/Cybook Gen3/eBooks/Zelazny, Roger - Ostrov mrtvých.mbp"
if [ ! -e "`echo "${F%.*}" | sed s#"$CYBOOK"#"$VYSTUP"#`.txt" ]
then
echo "Mazu "$F""
#rm -rf "$F"
else
echo "Nemazu"
fi

Vysledek:

Mazu /media/Cybook Gen3/eBooks/Zelazny, Roger - Ostrov mrtvých.mbp


VSTUP="/home/"$USER"/Knihy/Precist/"
VYSTUP="/home/"$USER"/Knihy/Konverze/"
CYBOOK="/media/Cybook Gen3/eBooks/"
F="/media/Cybook Gen3/eBooks/Neomillnerova, Petra--Hry na bolest.mbp"
if [ ! -e "`echo "${F%.*}" | sed s#"$CYBOOK"#"$VYSTUP"#`.txt" ]
then
echo "Mazu "$F""
#rm -rf "$F"
else
echo "Nemazu"
fi

Vysledek:

Nemazu

« Poslední změna: 24 Března 2013, 20:22:42 od František Zatloukal »
"Pouze text v MS Wordu je opravdu čistý, příteli."

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:if test " or '
« Odpověď #1 kdy: 24 Března 2013, 14:54:53 »
mno... a opravdu se ty soubory jmenují naprosto stejně?

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:if test " or '
« Odpověď #2 kdy: 24 Března 2013, 15:56:31 »
mno... a opravdu se ty soubory jmenují naprosto stejně?

Tak ten u ktereho mi nefunguje ten test:

/media/Cybook Gen3/eBooks/Zelazny, Roger - Ostrov mrtvych.txt
/media/Cybook Gen3/eBooks/Zelazny, Roger - Ostrov mrtvých.mbp # ten testuji 1

/home/jakub/Knihy/Konverze/Zelazny, Roger - Ostrov mrtvych.txt  # v pripade, ze chybi smazat "ten testuji 1"

Ten u ktereho ten test funguje:

/media/Cybook Gen3/eBooks/Neomillnerova, Petra--Hry na bolest.txt
/media/Cybook Gen3/eBooks/Neomillnerova, Petra--Hry na bolest.mbp # ten testuji 2

/home/jakub/Knihy/Konverze/Konverze/Neomillnerova, Petra--Hry na bolest.txt # v pripade, ze chybi smazat "ten testuji 2"

Jinak nazvy jsou urcite stejne, protoze se generuji v ramci jineho konverzniho skritptu "mezi sebou".




Zkusil jsem podminku maximalne zjednodusit a pak mi to bez problemu funguje. Netusim kde delam chybu.

Kód: [Vybrat]
jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ cat ~/bin/test4
#!/bin/bash
find  ./cybook -type f -iname '*.mbp'| while read F
do
if [ ! -e "`echo "${F%.*}" | sed s#cybook#konverze#`.txt" ]
then
echo "Mazu "$F""
#rm -rf "$F"
else
echo "Nemazu "$F""
fi
done

jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ ls -R
.:
cybook  konverze

./cybook:
1.mbp  1.txt  2.mbp  2.txt

./konverze:
1.mbp  1.txt  2.mbp  2.txt
jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ test4
Nemazu ./cybook/2.mbp
Nemazu ./cybook/1.mbp


jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ cat ~/bin/test4
#!/bin/bash
find  ./cybook -type f -iname '*.mbp'| while read F
do
if [ ! -e "`echo "${F%.*}" | sed s#cybook#konverze#`.txt" ]
then
echo "Mazu "$F""
#rm -rf "$F"
else
echo "Nemazu "$F""
fi
done

jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ ls -R
.:
cybook  konverze

./cybook:
1.mbp  1.txt  2.mbp  2.txt

./konverze:
1.mbp  2.mbp  2.txt
jakub@jakub-TravelMate-5740:~/Prechodne/nnn$ test4
Nemazu ./cybook/2.mbp
Mazu ./cybook/1.mbp


« Poslední změna: 24 Března 2013, 16:12:57 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:if test " or '
« Odpověď #3 kdy: 24 Března 2013, 16:09:57 »
vždyť se ti ty soubory liší v čárce nad y :P

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:if test " or '
« Odpověď #4 kdy: 24 Března 2013, 16:26:58 »
vždyť se ti ty soubory liší v čárce nad y :P

Uz mi to taky docvaklo. Me ten puvodni prevodni skript (ktery jsem tady neuvedl) nejak likviduje diakritiku, ale nevim proc. Takze zahada vyresena. Dik.

Jeste dotaz na zaver. Bude nasledujici test diky te * na konci expandovat na vsechny soubory s libovolnou priponou? Jde mi o to abych to pro kazdy typ souboru (doc, pdb, txt, ...) nemusel osetrovat zvlast.

if [ ! -e "`echo "${F%.*}" | sed s#"$CYBOOK"#"$VYSTUP"#`.*" ]

« Poslední změna: 24 Března 2013, 16:29:49 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:if test " or '
« Odpověď #5 kdy: 24 Března 2013, 16:38:57 »
bude, ale pokud tam těch souborů bude víc tak ti to nebude fungovat (bash: [: příliš mnoho argumentů)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:if test " or '
« Odpověď #6 kdy: 24 Března 2013, 16:49:00 »
bude, ale pokud tam těch souborů bude víc tak ti to nebude fungovat (bash: [: příliš mnoho argumentů)

Jasny jen je treba tu * hodit az za ty " -> if [ ! -e "`echo "${F%.*}" | sed s#"$CYBOOK"#"$VYSTUP"#`."* ]

Ja v ty slozce mam vzdy soubory s unikatnim nazvem (jen ruzne pripony) takze v pohode. Dekuji.
Snad je to vyreseno. Ted to du jeste zapracovat do toho monstr paskriptu.
« Poslední změna: 24 Března 2013, 17:22:29 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

 

Provoz zaštiťuje spolek OpenAlt.