Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Uran 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.
#!/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
.
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.
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
-
mno... a opravdu se ty soubory jmenují naprosto stejně?
-
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.
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
-
vždyť se ti ty soubory liší v čárce nad y :P
-
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"#`.*" ]
-
bude, ale pokud tam těch souborů bude víc tak ti to nebude fungovat (bash: [: příliš mnoho argumentů)
-
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.