Permalänk
Medlem

Sorterings script i Linux

Hej!

Har ett problem som jag inte reder ut eller snarare söker en lösning som jag inte hittar.

Problem:
Jag laddar ner filer med torrent programmet transmission genom amahi(fedora12). När jag laddar ner en torrent hamnar den färdiga filen i torrent mappen. Eftersom det är lite olika filer jag laddar ner så har jag olika mappar för olika typer av filer d.v.s. musik, film, dokument. För att flytta mina färdiga torrent's måste jag gå in manuellt och flytta filerna till respektive mappar. Jag vill slippa detta och ha ett script som sköter detta.

Det som ställer till det ytterligare är att amahis filhantering bygger på samba genom greyhole.

Min förkunskap:
Programmering är jag ingen fena på men någon typ av baskunskap har jag.
Linux klarar jag av och använda och skulle vilja påstå att jag är lite mer bevandrad än en vanlig användare.
Jag har för tillfället snöat in mig på BASHscripting vilket verkar vara en smidig lösning men det är inget krav. Jag har läst så ögonen blöder och all cola är slut. Men mycket är över mitt huvud. Jag har iaf lyckats få ut ett "Hello world" med lite olika funktioner.

Hur långt har jag kommit:

I och med att jag använder mig av greyhole. Så blev det en ände att börja dra i. Greyhole bygger helt på samba. Jag hittade smbclient samt smbmount. Efter lite funderande tror jag nog det smidigaste skulle vara att montera smb utdelningarna lokalt på servern kanske till och med i fstab för att slippa scripta med smbclient. Hoppas jag tänker rätt här för det hade sparat mycket script antar jag.

En ända att dra i var att starta scriptet. Här hittade jag en rad i transmission's config fil som startar ett script när nedladdningen är klar. Borde vara smidigt annars får jag lägga något som bevakar mappen eller kör scriptet ett visst klockslag. Men kan jag få programmet att starta scriptet så slipper jag in och härja på flera ställen.

Ytterligare en ände att dra i var hur filerna skall flyttas. Jag har hittat tre kommandon cp, mv och rsync. Ett problem är att jag måste ju veta när flytten är klar och om det har lyckats. rsync verkar man kunna trolla mycket med men vet inte om det är overkill. Filerna skall ju bara flyttas.

Vidare så är det en ände som jag har stora problem med. Det är att veta var skall jag flytta de olika filerna. En torrent kan ju innehålla flera olika filer. T.ex. *.nfo *.txt *mkv *.pdf m.m. samt att de kan ligga i flera undermappar. Här har jag hittat ls samt find dessa kommandons output kan jag skicka till en fil med > MEN hur skall jag göra med resultatet?

Avslutande tankar och funderingar

Jag vet inte om jag gör det mycket svårare än vad det är. Jag känner att mina bristande kunskaper spelar in nästa överallt. Vidare tänker jag att det borde redan finnas en smidig lösning på det här och jag har inte lyckats hitta rätt sökmetod. Att söka efter ett sådant här script har jag helt klart misslyckats med. Jag blir iaf härligt frustrerad när jag sitter här och funderar.

Hoppas jag har formulerat det här rätt och att ni fattar vad jag menar.

Tack på förhand zeem

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.

Permalänk
Medlem

Jag ser två huvudspår.
Antingen försöker du klassifiera filen när den har laddat klart eller när du påbörjar nedladdningen.

Om jag skulle ha klassifierat filen efteråt skulle jag nog ha kollat på den största filen, kollat vad det är för filtyp med `file` och sedan försökt sortera. Är det en paketerad fil så är det ju bara paketerar den upp och sedan sortera.

Visa signatur

citera!

Permalänk
Avstängd

#!/bin/bash
#
#
#

################################################
#
# Functions
#
################################################

DIR=$(pwd)

Music()
{
if [ -e "$DIR/Music" ];then
echo -n ""
else
mkdir Music
fi

mv *.mp3 "$DIR/Music" 2>/dev/null
mv *.wav "$DIR/Music" 2>/dev/null
mv *.midi "$DIR/Music" 2>/dev/null
}

Movies()
{
if [ -e "$DIR/Movies" ];then
echo -n ""
else
mkdir Movies
fi

mv *.avi "$DIR/Movies" 2>/dev/null
mv *.mpeg "$DIR/Movies" 2>/dev/null
mv *.mpg "$DIR/Movies" 2>/dev/null
}

Pictures()
{
if [ -e "$DIR/Pictures" ];then
echo -n ""
else
mkdir Pictures
fi

mv *.jpeg "$DIR/Pictures" 2>/dev/null
mv *.jpg "$DIR/Pictures" 2>/dev/null
mv *.gif "$DIR/Pictures" 2>/dev/null
mv *.png "$DIR/Pictures" 2>/dev/null
}

Compressed()
{
if [ -e "$DIR/Compressed" ];then
echo -n ""
else
mkdir Compressed
fi

mv *.zip "$DIR/Compressed" 2>/dev/null
mv *.rar "$DIR/Compressed" 2>/dev/null
mv *.7z "$DIR/Compressed" 2>/dev/null
mv *.tar "$DIR/Compressed" 2>/dev/null
mv *.tar.bz2 "$DIR/Compressed" 2>/dev/null
mv *.tar.gz "$DIR/Compressed" 2>/dev/null
}

################################################
#
# Main Program
#
################################################

Music
Movies
Pictures
Compressed

Visa signatur

Harry

Permalänk
Avstängd

#Move all .txt files to subdir txt.
#Only create txt subdir if at least 1 file with .txt extension exists.
for i in $(ls *.txt); do
mkdir txt
break
done
mv *.txt txt

Visa signatur

Harry

Permalänk
Medlem
Skrivet av lang999:

#!/bin/bash
#
#
#

################################################
#
# Functions
#
################################################

DIR=$(pwd)

Music()
{
if [ -e "$DIR/Music" ];then
echo -n ""
else
mkdir Music
fi

mv *.mp3 "$DIR/Music" 2>/dev/null
mv *.wav "$DIR/Music" 2>/dev/null
mv *.midi "$DIR/Music" 2>/dev/null
}

Movies()
{
if [ -e "$DIR/Movies" ];then
echo -n ""
else
mkdir Movies
fi

mv *.avi "$DIR/Movies" 2>/dev/null
mv *.mpeg "$DIR/Movies" 2>/dev/null
mv *.mpg "$DIR/Movies" 2>/dev/null
}

Pictures()
{
if [ -e "$DIR/Pictures" ];then
echo -n ""
else
mkdir Pictures
fi

mv *.jpeg "$DIR/Pictures" 2>/dev/null
mv *.jpg "$DIR/Pictures" 2>/dev/null
mv *.gif "$DIR/Pictures" 2>/dev/null
mv *.png "$DIR/Pictures" 2>/dev/null
}

Compressed()
{
if [ -e "$DIR/Compressed" ];then
echo -n ""
else
mkdir Compressed
fi

mv *.zip "$DIR/Compressed" 2>/dev/null
mv *.rar "$DIR/Compressed" 2>/dev/null
mv *.7z "$DIR/Compressed" 2>/dev/null
mv *.tar "$DIR/Compressed" 2>/dev/null
mv *.tar.bz2 "$DIR/Compressed" 2>/dev/null
mv *.tar.gz "$DIR/Compressed" 2>/dev/null
}

################################################
#
# Main Program
#
################################################

Music
Movies
Pictures
Compressed

Hej!

Tack för ett snabbt svar. Det var nyttigt och läsa igenom scriptet. pwd hade jag inte en aning om tack för det uppslaget.

Om jag fattar det här scriptet rätt. Så skapar det en mapp i den mappen jag är just nu om inte mappen finns beroende på vilken typ av fil det är. Sedan flyttar den över filerna till den mappen.

Scriptet börjar med att skapa de olika funktionerna för respektive typ. för att sedan köra dem.

En lösning som jag hoppas jag fattat rätt. Det skulle gå att modifera mitt system så att jag monterar mina sambashares i dessa undermappar. Så hamnar de rätt direkt annars så får jag ändå flytta filerna.

Ett problem som jag inte riktigt ser vad scriptet gör är om det är en mapp med olika filer i. Iom att jag vill behålla en viss struktur iaf i music mappen och inte en hög med låtar som ligger och härjar. Iof kan säkert iTunes sortera upp dem. Men jag skulle vilja ha en någorlunda struktur.

Tack igen

Hur kan jag modifera scriptet för att få det att flytta hela mappen?

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.

Permalänk
Medlem
Skrivet av Dosshell:

Jag ser två huvudspår.
Antingen försöker du klassifiera filen när den har laddat klart eller när du påbörjar nedladdningen.

Om jag skulle ha klassifierat filen efteråt skulle jag nog ha kollat på den största filen, kollat vad det är för filtyp med `file` och sedan försökt sortera. Är det en paketerad fil så är det ju bara paketerar den upp och sedan sortera.

Sitter och lurar på kommandot file och får inte det riktigt att fungera.

Det som verkar vara smidigast är nog att klassifiera efteråt. Jag vet inte riktigt hur jag kan göra det innan. hehe jag vet ju inte heller hur jag kan klassificera något

tack

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.

Permalänk
Medlem

Så här långt har jag kommit

#!/bin/bash
#
#Finds diffrent types of files
#
# author: zeem

shopt -s -o nounset

#
# Global Declarations
#

declare -rx SCRIPT=${0##*/} # SCRIPT is the name of this script
declare -rx find="/bin/find" # the find command

#
# Sanity checks
#

if test -z "$BASH" ; then
printf "$SCRIPT:$LINENO: please run this script with the BASH shell\n" >$2
exit 192
fi
if test ! -x "$find" ; then
printf "$SCRIPT:LINENO: the command $find is not available - \ aborting\n" >$
exit 192
fi

#
# Main script
#
# Finds movie file types
#

find -name "*.mkv" -type f

#
# Main script
#
# Finds movie file types
#

find -name "*.mkv" -type f

#
# Clean up
#

exit 0

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.

Permalänk
Medlem

nu kan jag hitta filerna även i subdirs mha find. Dock så vet jag inte riktigt hur det här blir med när scriptet startas av torrent programmet.

När jag tänker lite på det så kommer scriptet (kommandot) hitta samtliga filer i min nuvarande mapp. Kanske inte det mest lysande kan bli konstigt när filer skall flyttas.

Det som verkar vara intressant är - execute tillägget till find. Man kanske kan göra något med printf för att få reda på vilken mapp som filen ligger i. Måste lura lite på det.

Kanske får skriva något testscript för att se hur det där torrent programmet fungerar.

Sjukt långtid det här kommer ta. Synd att jag inte är supersmartast. Tycker det är lite konstigt att jag inte hittar något som verkar flytta hela mappen med filen i. Det måste vara omöjligt att jag är den förste som vill ha ett sådant här script/lösning av alla i hela världen.

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.