Ordner Sortieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
UniCat
Beiträge: 3
Registriert: 24.01.2013 10:36:09

Ordner Sortieren

Beitrag von UniCat » 24.01.2013 12:25:48

Hallo,

ich bin ein ziemlicher Linux-Anfänger und habe folgendes Problem,
Ich möchte nämlich verschiedene Ordner anhand der darin befindlichen Dateien sortieren.
Die Verzeichnisstruktur sieht ungefähr so aus:

~/quelle/ordner1/file1
------------/ordner2/file2
------------/ordner3/file3
-----------
mit dem Script möchte ich dann nach einem bestimmten fileX mit einem bestimmten Muster (bsp. nach Größe und/oder Dateiendung) suchen und anschließend mit dem aktuellen Ordner verschieben. Am Ende würde dann so aussehen:

~/ziel/sort1/ordner1/file1
----------------/ordner2/file2
---------------
------- /sort2/ordner3/file3

Danke vorab

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Ordner Sortieren

Beitrag von syssi » 24.01.2013 12:36:51

Code: Alles auswählen

find ~/quelle -name '*.mp3' -size 10M -type f -exec dosomething.sh {} ~/zielordner \; 
find sucht dabei im Ordner "quelle" nach allen Dateien mit der Endung mp3, welche groesser als 10MB sind und fuehrt fuer jeden Treffer das Skript "dosomething.sh" aus. Als Parameter wird der Pfad zum Treffer uebergeben. In der "dosomething.sh" kannst du dann selbst definieren, was mit der Datei passieren soll. Folgende dosomething.sh kopiert die Datei (erster Parameter) zum Ziel (zweiter Parameter).

Code: Alles auswählen

#!/bin/bash

if [ $# -eq 2 ];
then
  SRC=$1
  DST=$2
  # falls du mal den Dateinamen brauchst
  NAME=$(basename $SRC)

  mv $SRC $DST
else
  echo "Synposis: dosomething.sh <srcfile> <dst>"
fi

UniCat
Beiträge: 3
Registriert: 24.01.2013 10:36:09

Re: Ordner Sortieren

Beitrag von UniCat » 24.01.2013 13:21:21

Vielen Dank für die schnelle Antwort.
Hier wird nur die gesuchte Datei verschoben, richtig? aber wie kann ich dann den Mutter-Ordner + die gesuchte Datei verschieben?
Danke

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Ordner Sortieren

Beitrag von syssi » 24.01.2013 14:31:58

Die Logik wirst du in die dosomething.sh packen muessen. Da du nur einzelne Dateien aus dem Quellordner nimmst und keine ganzen Ordner verschiebst wirst du die einzelnen Aktionen zerlegt muessen. Da bedeutet, dass dein Skript etwa folgendes tun wird:

Code: Alles auswählen

*Pseudocode*

SRC=$1
DST=$2

# Verzeichnisbaum und Dateiname voneinander trennen
DATEINAME=$(basename $SRC)
PFAD=nehme $SRC schneide Dateiname ab. Ergebnis: Pfad

# Den Pfad um die uninteressante Zeile saeubern. z.B. "~/quelle" weg schneiden. Uebrig bleibt "ordner1"
PFADSAUBER=$PFAD beschneiden

# Ordnerstruktur im Ziel erstellen. 
mkdir -p $DST/$PFADSAUBER

# Datei von a nach b verschieben
mv $SRC $DST/$PFADSAUBER/$DATEINAME


UniCat
Beiträge: 3
Registriert: 24.01.2013 10:36:09

Re: Ordner Sortieren

Beitrag von UniCat » 25.01.2013 13:52:01

Hallo vielen dank nochmal für die Antwort und für die Erklärung
erst jetzt habe ich verstanden, daß man bei dieser Aufgabe den Pfad zur Datei vom dem eingentlichen Namen der Datei trennen "muss"!
Der Code funktioniert wunderbar und tut genau das was man von ihm erwartet.
Merci

Code: Alles auswählen

SRC=$1
DST=$2

# Verzeichnisbaum und Dateiname voneinander trennen
DATEINAME=$(basename $SRC)

#schneide Dateiname ab. Ergebnis: Pfad
PFAD=$(dirname $SRC) 

# Den Pfad um die uninteressante Zeile saeubern. z.B. ~/quelle weg schneiden. Uebrig bleibt ordner1
ORDNERNAME=$(basename $PFAD) 

# Ordnerstruktur im Ziel erstellen.
mkdir -p $DST/$ORDNERNAME

# Datei von a nach b verschieben
mv $SRC $DST/$ORDNERNAME

Antworten