• 1
  • 2
2010-03-16, 12:12
  #13
Medlem
sparlunds avatar
Citat:
Ursprungligen postat av cpapa
Du kan ju köra något liknande:
Kod:
find / -name "*.rar" -exec unrar {} +
Det funkade inte riktigt! Men jag gjorde säkert ngt fel.

Ngn annan som förslag på kommando?
Citera
2010-03-16, 14:38
  #14
Medlem
SSHs avatar
Citat:
Ursprungligen postat av sparlund
Det funkade inte riktigt! Men jag gjorde säkert ngt fel.

Ngn annan som förslag på kommando?

Jag antar att det är rarade releaser du vill packa upp. I så fall vill du inte köra unrar på varje rar-fil utan istället köra unrar en gång(?) i varje katalog som det finns rar-filer i. Är dock inte helt säker på hur det fungerar då flera filer packats ner i rar-filerna. Packas allt upp då man enbart kör unrar på en godtycklig rar-fil? Skrev snabbt följande zsh-skript:

Kod:
#!/bin/zsh

() {
    
cd $1
    
for f in *(/N); (r $f)

    
RARFILES=(*.(rar|r<0-9><0-9>)(N))
    if [[ $
#RARFILES > 0 ]]; then
        
unrar x ${(q)RARFILES[1]}
        if [[ $? = 
]]; then
            
echo SUCCESS
            
#rm $RARFILES
        
fi
    fi
}

if [[ $
# = 0 ]]; then
    
echo "Usage: unrar.zsh directory"
else
    
$

Skriptet är rekursivt och besöker alla underkataloger i katalogen som skickades som argument. Den första delen av funktionen r gör de rekursiva anropen, den andra bestämmer vad som görs i varje katalog. I varje katalog där det finns rar-filer packas dessa upp. Om uppackningen lyckades skrivs texten SUCCESS ut. Kommenterar man bort raden med rm tas rar-filerna istället bort. Gör detta först då du försäkrat dig om att skriptet fungerar.

Försökte först skriva skriptet i Bash, men Bash bråkade med mig. Har alltid stört mig på Bash.

Har själv liknande problem som trådstartaren. Har ett par TB med rarade releaser och ett media center som inte kan spela dem. Har funderat på att packa upp allting, men har inte velat förstöra orginalreleaser. Kommer kanske packa upp dem med skriptet.
__________________
Senast redigerad av SSH 2010-03-16 kl. 14:49.
Citera
2010-03-16, 19:32
  #15
Medlem
cpapas avatar
Citat:
Ursprungligen postat av sparlund
Det funkade inte riktigt! Men jag gjorde säkert ngt fel.

Ngn annan som förslag på kommando?
Vad fungerar inte?

Citat:
Ursprungligen postat av SSH
Jag antar att det är rarade releaser du vill packa upp. I så fall vill du inte köra unrar på varje rar-fil utan istället köra unrar en gång(?) i varje katalog som det finns rar-filer i. Är dock inte helt säker på hur det fungerar då flera filer packats ner i rar-filerna. Packas allt upp då man enbart kör unrar på en godtycklig rar-fil?
Första filen brukar väl heta .rar (alternativt) .r00 och resten .r01, .r02 ... ? Kör man inte bara unrar på i alla fall första filen (möjligt att det fungerar på godtycklig fil i serien), eller är jag helt ute och cyklar?

Enligt namnkonventionen ovan bör det alltså fungera att köra (med SSHs önskemål om katalog):
Kod:
find <sök_rot_katalog> -name "*.rar" -execdir unrar <enl. manual> {} +

Annars så kan man väl söka på *.r01 om unrar fungerar på godtycklig fil, och namnkonventionen gäller. Det går att köra find -exec med ett semikolon som avslutande tecken för att ej konkatenera sökresultaten som argument ... men vad jag förstår så borde unrar klara det?

Jag kör find med -exec switchen flera gånger i veckan, inte just med unrar men det borde ju inte vara någon skillnad.

PS.
@TS: Om det är ett "argument till '-exec' saknas" fel så måste du escapea {} (dvs \{\}) och möjligtvis ; också.
__________________
Senast redigerad av cpapa 2010-03-16 kl. 19:39.
Citera
2010-03-16, 20:45
  #16
Medlem
SSHs avatar
Glömde fi i slutet av mitt skript:
Kod:
#!/bin/zsh

() {
    
cd $1
    
for f in *(/N); (r $f)

    
RARFILES=((#i)*.(rar|r<0-9><0-9>)(N))
    
if [[ $#RARFILES > 0 ]]; then
        
if unrar x ${(q)RARFILES[1]}; then
            
echo SUCCESS
            
#rm $RARFILES
        
fi
    fi
}

if [[ $
# = 0 ]]; then
    
echo "Usage: unrar.zsh directory"
else
    
$1
fi 

Citat:
Ursprungligen postat av sparlund
Det funkade inte riktigt! Men jag gjorde säkert ngt fel.

Ngn annan som förslag på kommando?
För att packa upp ska man köra unrar med argumentet x. Exempel:
unrar x fil.rar

Citat:
Ursprungligen postat av cpapa
Första filen brukar väl heta .rar (alternativt) .r00 och resten .r01, .r02 ... ? Kör man inte bara unrar på i alla fall första filen (möjligt att det fungerar på godtycklig fil i serien), eller är jag helt ute och cyklar?
Det förekommer även att filnamnen är på formen namn.part00.rar, namn.part01.rar, osv. Tror inte det spelar någon roll vilken rar-fil man kör unrar på, men har för mig att jag någon gång laddade ner en release med två filer nedpackade i samma uppsättning rar-filer och jag fick ut den andra filen först då jag körde unrar på den sista rar-filen. Kan minnas fel, eller så var det den som skapade rar-filerna som klantat sig på något vis. Nästan alltid brukar rar-filerna enbart innehålla en fil. Undertexter och liknande brukar ligga i sina egna kataloger. Har någon mer information om specialfallet med flera filer i samma uppsättning rar-filer?

Citat:
Ursprungligen postat av cpapa
Enligt namnkonventionen ovan bör det alltså fungera att köra (med SSHs önskemål om katalog):
Kod:
find <sök_rot_katalog> -name "*.rar" -execdir unrar <enl. manual> {} +

Annars så kan man väl söka på *.r01 om unrar fungerar på godtycklig fil, och namnkonventionen gäller. Det går att köra find -exec med ett semikolon som avslutande tecken för att ej konkatenera sökresultaten som argument ... men vad jag förstår så borde unrar klara det?

Jag kör find med -exec switchen flera gånger i veckan, inte just med unrar men det borde ju inte vara någon skillnad.
Kände inte till execdir-flaggan. Använder dock ofta -exec. find-exempelet fungerar med unrar x då det bara finns en rar-fil i varje katalog. Det blir dock problem om man har filnamn på formen partxx.rar eller om alla filnamn är på formen r[0-9][0-9].
Citera
2010-03-17, 11:33
  #17
Medlem
cpapas avatar
Citat:
Ursprungligen postat av SSH
Det förekommer även att filnamnen är på formen namn.part00.rar, namn.part01.rar, osv. Tror inte det spelar någon roll vilken rar-fil man kör unrar på, men har för mig att jag någon gång laddade ner en release med två filer nedpackade i samma uppsättning rar-filer och jag fick ut den andra filen först då jag körde unrar på den sista rar-filen. Kan minnas fel, eller så var det den som skapade rar-filerna som klantat sig på något vis. Nästan alltid brukar rar-filerna enbart innehålla en fil. Undertexter och liknande brukar ligga i sina egna kataloger. Har någon mer information om specialfallet med flera filer i samma uppsättning rar-filer?
Den formateringen på rar har jag aldrig stött på! Då fungerar inte find om man inte gör någon överlistig switchkombination.

Ang. två filer så brukar allt packas upp om man packar upp första filen. Antagligen packaren som hade klantat sig.
Citera
2010-03-17, 11:42
  #18
Medlem
På min fil-/torrent-/diverseserver kör jag med följande unpackingscript. Det packar upp en sökväg från min torrentdisk till lagringsdisk/unpacked/releasenamn/. Medan filen packas upp läggs en fil med namnet unpacking i mappen det packas upp till, när allt är uppackat tas den filen bort så man direkt ser att det är klart. Scriptet fungerar rekursivt och packar alltså även upp undermappar och döper dom rätt.
tex
unpack.sh /home/ginux/torrents/string-emil.collection.2010-GAYZOR/
---->
/home/ginux/lagring/unpacked/string-emil.collection.2010-GAYZOR/

Du behöver bara ändra sökvägarna i scriptet, samt lägga till rm -rf $1 på slutet så borde den göra som du önskar, alltså packa upp till en mapp och sedan ta bort rarfilerna.

Kod:
#!/bin/sh
LOG="/home/ginux/unpacklog"
TEMPFOLDER="/home/ginux/lagring/unpacked"

FOLDERNAME=$(basename $1)
echo $FOLDERNAME

mkdir $TEMPFOLDER/$FOLDERNAME
touch $TEMPFOLDER/$FOLDERNAME/UnPaCkInG
find "$1" -iregex '.*\.rar' -and -not -iregex '.*\.part[0-9]+.rar' \
   -or -iregex '.*\.part0*1\.rar' \
| while read RAR
do (
   cd "${RAR%/*}"
   unrar x -r "${RAR##*/}" $TEMPFOLDER/$FOLDERNAME
) done >>"$LOG"
rm $TEMPFOLDER/$FOLDERNAME/UnPaCkInG

Min rtorrent.rc:

Kod:
# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
max_peers = 2000

# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
max_peers_seed = 800

# Maximum number of simultanious uploads per torrent.
max_uploads = 800

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 9500
upload_rate = 9500

# Default directory to save the downloaded torrents.
directory = /home/ginux/torrents/

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/ginux/.session/

# Watch a directory for new torrents, and stop those that have been
# deleted.
#schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=
schedule = watch_directory,5,5,load_start=/home/ginux/torrents/Temp/*.torrent
schedule = untied_directory,5,5,stop_untied=
schedule = tied_directory,5,5,start_tied=

# Port range to use for listening.
port_range = 59432-59432

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes


system.method.set_key = event.download.finished,unpack_rar,"execute=/home/ginux/.scripts/unpack.sh,$d.get_base_path="
__________________
Senast redigerad av ginux 2010-03-17 kl. 11:52.
Citera
2010-03-17, 18:13
  #19
Medlem
Citat:
Ursprungligen postat av ginux
På min fil-/torrent-/diverseserver kör jag med följande unpackingscript. Det packar upp en sökväg från min torrentdisk till lagringsdisk/unpacked/releasenamn/. Medan filen packas upp läggs en fil med namnet unpacking i mappen det packas upp till, när allt är uppackat tas den filen bort så man direkt ser att det är klart. Scriptet fungerar rekursivt och packar alltså även upp undermappar och döper dom rätt.
tex
unpack.sh /home/ginux/torrents/string-emil.collection.2010-GAYZOR/
---->
/home/ginux/lagring/unpacked/string-emil.collection.2010-GAYZOR/

Du behöver bara ändra sökvägarna i scriptet, samt lägga till rm -rf $1 på slutet så borde den göra som du önskar, alltså packa upp till en mapp och sedan ta bort rarfilerna.

Kod:
#!/bin/sh
LOG="/home/ginux/unpacklog"
TEMPFOLDER="/home/ginux/lagring/unpacked"

FOLDERNAME=$(basename $1)
echo $FOLDERNAME

mkdir $TEMPFOLDER/$FOLDERNAME
touch $TEMPFOLDER/$FOLDERNAME/UnPaCkInG
find "$1" -iregex '.*\.rar' -and -not -iregex '.*\.part[0-9]+.rar' \
   -or -iregex '.*\.part0*1\.rar' \
| while read RAR
do (
   cd "${RAR%/*}"
   unrar x -r "${RAR##*/}" $TEMPFOLDER/$FOLDERNAME
) done >>"$LOG"
rm $TEMPFOLDER/$FOLDERNAME/UnPaCkInG

Min rtorrent.rc:

Kod:
# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
max_peers = 2000

# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
max_peers_seed = 800

# Maximum number of simultanious uploads per torrent.
max_uploads = 800

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 9500
upload_rate = 9500

# Default directory to save the downloaded torrents.
directory = /home/ginux/torrents/

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/ginux/.session/

# Watch a directory for new torrents, and stop those that have been
# deleted.
#schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=
schedule = watch_directory,5,5,load_start=/home/ginux/torrents/Temp/*.torrent
schedule = untied_directory,5,5,stop_untied=
schedule = tied_directory,5,5,start_tied=

# Port range to use for listening.
port_range = 59432-59432

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes


system.method.set_key = event.download.finished,unpack_rar,"execute=/home/ginux/.scripts/unpack.sh,$d.get_base_path="

Kan inte edita längre, men du behöver såklart inte ha med raden
Kod:
echo $FOLDERNAME
den är bara där för att se att mappen är rätt :P
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in