Heysan.
Jeg kunne godt tænke mig at få lidt hjælp til at lave et script, der selv udpakker alle RAR-filer i et dir og dets undermapper, helt automatisk, og sletter rar-filerne igen bagefter.
Er der nogle der kan hjælpe mig på det område?
Heysan.
Jeg kunne godt tænke mig at få lidt hjælp til at lave et script, der selv udpakker alle RAR-filer i et dir og dets undermapper, helt automatisk, og sletter rar-filerne igen bagefter.
Er der nogle der kan hjælpe mig på det område?
19-11-2005
#!/bin/bash
rar e arkivnavn.rar
echo "password10"
exit 1
rar e arkivnavn.rar
echo "password11"
exit 1
10-01-2009
Den må du hellere forklare lidt?
Det jeg gerne vil have den til er, at den også selv finder filerne, så jeg ikke skal angive arkivnavne?
18-06-2008
f.eks, * og ? er dine venner når du skriver scripts - Prøv at kigge på disse to dokumenter hvis du har interesse for scripting.
BASH Programming - Introduction HOW-TO by Mike G mikkey at dynamo.com.ar
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html ( har et file renaming script hvor du kan se brugen af f.eks. * )
Advanced Bash-Scripting Guide An in-depth exploration of the art of shell scripting Mendel Cooper
http://tldp.org/LDP/abs/html/
Og så skal du kigge på recursive funktioner se. feks. http://www.tech-recipes.com/rx/732/recursive-grep/
------------------------------------------------------------------------
Know someone with MS, ALS, Aphasia or similar problems? Visit http://globability.org - to learn more about completely Free Open Source software currently under development - Read "Walter Kraft and the Alien Menace" - A science fiction originally released in support of charity. Find it and much more on http://einarpetersen.com - If my post has been helpful please feel free to support me and my work!
26-02-2003
Prøv om dette kan hjælpe dig igang
#!/bin/bash
WORK_DIR=""
function rar_test
{
# Hvis der findes rar filer i angiver directory skrives de i filen $WORK_DIR/rar_test
find $1 -name \*.rar >$WORK_DIR/rar_test
while read line
do
# find hvilket directory skal rar filen pakkes ud
bn=$(basename $line)
ch_dir=${line/$bn/""}
# skift til directory hvor rar findes
cd $ch_dir
# brug af x istedet for e opretter evt directories i rar filen
unrar x -inul $line
# Hvordan endte udpakningen af rar fil
result=$?
# Vis resultat af udpakning
if [[ $result -eq 0 ]]; then
echo "$line er pakket ud"
rm $line
# giv besked om rar file er slettet eller ej.
if [[ -f $line ]]; then
echo "$line er ikke slettet"
else
echo "$line er slettet"
# næste echo er kun for at give en blank line mellem filerne
echo
fi
fi
done < $WORK_DIR/rar_test
# fjern midlertidig fil
rm $WORK_DIR/rar_test
}
function show_help {
clear
cat <<- HELP
Eksempel på brug
$0 [directory]
Hvor [directory] er det directory med rar filer der skal pakkes ud
HELP
}
function is_dir {
if [[ -d /dev/shm ]]; then
# Dette er er ram drev
WORK_DIR=/dev/shm
else
WORK_DIR=$(pwd)
fi
}
if [[ $# -lt 1 ]] ; then
show_help
else
clear
is_dir
rar_test $1
fi
10-01-2009
Hvad så når filendelserne ikke kun er .rar, men også .r0xx osv ?
26-02-2003
De bliver alle pakket ud som de skal, men til gengæld bliver kun .rar slettet :-(
10-01-2009
#4 Hvis jeg kører dit script direkte fra terminalen således:
prooi@prooi:~/Desktop$ sh rar.sh
rar.sh: 5: function: not found
rar.sh: 39: Bad substitution
hvor min scriptfil ser sådan ud:
#!/bin/bash
WORK_DIR="/data/rartest/"
function rar_test
{
# Hvis der findes rar filer i angiver directory skrives de i filen $WORK_DIR/rar_test
find $1 -name \*.rar >$WORK_DIR/rar_test
while read line
do
# find hvilket directory skal rar filen pakkes ud
bn=$(basename $line)
ch_dir=${line/$bn/""}
# skift til directory hvor rar findes
cd $ch_dir
# brug af x istedet for e opretter evt directories i rar filen
unrar x -inul $line
# Hvordan endte udpakningen af rar fil
result=$?
# Vis resultat af udpakning
if [[ $result -eq 0 ]]; then
echo "$line er pakket ud"
rm $line
# giv besked om rar file er slettet eller ej.
if [[ -f $line ]]; then
echo "$line er ikke slettet"
else
echo "$line er slettet"
# næste echo er kun for at give en blank line mellem filerne
echo
fi
fi
done < $WORK_DIR/rar_test
# fjern midlertidig fil
rm $WORK_DIR/rar_test
}
Får jeg den fejl som skrevet ovenover.
Why?
26-02-2003
Hvilken version af bash benytter du ? ( findes således: bash --version )
Du kan også prøve nedenstående
Gør rar.sh eksekverbar
eksekver rar.sh uden brug af sh ( rar.sh eller hvis rar.sh er i samme mappe ./rar.sh )
10-01-2009
Bruger version 3.2.39 af bash.
Gjorde filen ekserverbar, og kørte den med ./rar.sh, og det virkede egentlig fint - den fandt filen og skrev den til rar_test.
Så mangler jeg bare at få den udpakket også?
- For det gør den nemlig ikke.
26-02-2003
Har du unrar installeret ?
10-01-2009
Havde jeg ikke, men det hjalp ikke at installere det - får stadig intet output i form af en fil.
Filerne jeg vil udpakke går fra:
xxx.r01 - xxx.r90 og ender med en xxx.rar
Problemet ligger i, at jeg ikke tror programmet opfatter .r01 filen som en rar fil, og derfor ikke udpakker den..
Alle rar-filerne er en stor rarfil der er splittet op i winrar.
26-02-2003
Den rar og unrar jeg har adgang til er nyere end den du har benyttet.
den udgave jeg har navngiver på en anden måde end de ældre udgaver.
prøv at indsætte nedenstående kode i scriptet mellem disse 2 linier
# brug af x istedet for e opretter evt directories i rar filen
unrar x -inul $line
rar_split=$(echo $line | cut -f1 -d.)
if [[ -n $rar_split ]]; then
list=$(ls $rar_split.r*)
for i in $list
do
a=$(echo $i | cut -f1 -d.)
b=$(echo $i | cut -f2 -d.)
if [[ "$b" != "rar" ]]; then
b=${b//r/.part0}
b="$b.rar"
mv $i $a$b
fi
done
fi
edit:
$1 rettet til $line
10-01-2009
#12 Forstår ikke helt hvor jeg skal sætte det ind henne?
Lige nu ser koden sådan ud:
#!/bin/bash
WORK_DIR="/data/rartest/"
function rar_test
{
# Hvis der findes rar filer i angiver directory skrives de i filen $WORK_DIR/rar_test
find $1 -name \*.rar >$WORK_DIR/rar_test
while read line
do
# find hvilket directory skal rar filen pakkes ud
bn=$(basename $line)
ch_dir=${line/$bn/""}
# skift til directory hvor rar findes
cd $ch_dir
# brug af x istedet for e opretter evt directories i rar filen
rar_split=$(echo $line | cut -f1 -d.)
if [[ -n $rar_split ]]; then
list=$(ls $rar_split.r*)
for i in $list
do
a=$(echo $i | cut -f1 -d.)
b=$(echo $i | cut -f2 -d.)
if [[ "$b" != "rar" ]]; then
b=${b//r/.part0}
b="$b.rar"
mv $i $a$b
fi
done
fi
unrar x -inul $line
# Hvordan endte udpakningen af rar fil
result=$?
# Vis resultat af udpakning
if [[ $result -eq 0 ]]; then
echo "$line er pakket ud"
rm $line
# giv besked om rar file er slettet eller ej.
if [[ -f $line ]]; then
echo "$line er ikke slettet"
else
echo "$line er slettet"
# næste echo er kun for at give en blank line mellem filerne
echo
fi
fi
done < $WORK_DIR/rar_test
# fjern midlertidig fil
rm $WORK_DIR/rar_test
}
og det virker ihvertfald ikke.
26-02-2003
Prøv om du kan finde en version af unrar der er så gammel at den kan udpakke *.r01 o.s.v.
10-01-2009
Har du evt et link til en sådan version?
26-02-2003
Her er et par steder hvor du kan hente ældre versioner af unrar
http://rpm.pbone.net/index.php3?stat=3&limit=1&sro...
http://rpmforge.net/user/packages/unrar/
Vær dog opmærksom på at de ældre versione af unrar også kan være afhængig af andre ældre libraries.