sergi62
Goto Top

Verzeichnisstruktur ablegen und mit Datum erweitern

Hallo zusammen,
ich habe mich schon eigene Zeit durch die Angeboten Artikel gewühlt. Aber leider keine wo ich weiter verwenden könnte.

Wie könnte den Batch denn aussehen ?

Aufgabe: Datei In eine Verzeichesstruktur durch einen Punkt getrennt um das Tagesdatum (YYYYMMDD) erweitern werden.

z.B

01/10060746/Test1.001 -----------------> /srv/www/vid/mitglied/0/01/10060746/Test1.001.20080821
01/10060746/Test2.rab -----------------> /srv/www/vid/mitglied/0//01/10060746/Test2.rab.20080821


03/20060746/Test1.001 -----------------> /srv/www/vid/mitglied/0/03/20060746/Test1.001.20080821
03/20060746/Test2.rab -----------------> /srv/www/vid/mitglied/0/03/20060746/Test2.rab.20080821
03/20060746/Test3.pre -----------------> /srv/www/vid/mitglied/0/03/20060746/Test3.pre.20080821

usw.

die Archives Dateien müssen in folgender Verzeichnisstruktur ablegen:

Im Basisverzeichnis "/srv/www/vid/mitglied/0" wird für jeden Mitglied ein Subverzeichnis (Mandantenverzeichnis) angelegt, in Ihrem Fall also des Verzeichnis "0".
Unterhalb des Mitgliedverzeichnis kommen die zum Mitglied gehörigen Betriebsverzeichnisse also z. B. "01","03", etc.In diesen Verzeichnissen liegen alle die Daten, die für die Mitglied eines Betriebs identisch sind.

Sollen für Mitglieder spezifische Daten hinterlegt werden, so erzeugen Sie unterhalb des Betriebsverzeichnis ein mitgliedverzeichnis das die Mitgliednummer als Namen trägt. In dieses Verzeichnis können Sie dann alle Mitgliedspezifische Archiv Dateien wie z.B. die Test1 Test2 datei hinterlegen.

Sie erhalten also folgende Verzeichnisstruktur:

/srv/www/vid/mitglied Basisverzeichnis
0 Mandantenverzeichnis
01 Betriebsverzeichnis
10060746 Mitgliedverzeichnis


Die Archivdateien "Test1.001", "Test2.rab" und "Test3.pre" müssen durch einen Punkt getrennt um das Tagesdatum (YYYYMMDD) erweitern werden bevor Sie in die entsprechenden Verzeichnisse eingestellt werden, z.B. Test1.001.20080821.

Vielen Dank im Vorraus!!

Grüße
Serg

Content-Key: 95028

Url: https://administrator.de/contentid/95028

Printed on: April 26, 2024 at 18:04 o'clock

Member: datasearch
datasearch Aug 22, 2008 at 16:45:48 (UTC)
Goto Top
Hallo Serg,

ich habe dir mal etwas zusammengeschrieben. Das Script kopiert den Quellordner (Parameter 1) in einen Zielordner (Parameter 2) und erweitert dabei alle Dateien um das aktuelle Datum.

Das Script kann leider nicht rekursiv kopieren. Möchtest du deine Struktur automatisch kopieren, sag nochmal bescheid.

#!/bin/bash
# Parameter 1: zu kopierender Ordner
# Parameter 2: Zielpfad
#
if [[ -d $1  &&  ! -z $1 ]]; then   # PARM1 testen
 if [[ -d $2 && ! -z $2 ]]; then    # PARM2 testen
  erweiterung=$(date +%Y%m%d)       # Datum bereitstellen
  ls -1 $1 | while read a; do       # Ordnerinhalt listen
   cp -v $1/$a $2/$a.$erweiterung   # Dateien kopieren
  done
 else
  echo FEHLER 2 - Zielordner nicht vorhanden oder nicht angegeben
  exit 1
 fi
else
 echo FEHLER 1 - Quelle nicht Vorhanden oder nicht angegeben
 exit 1
fi

Das Script produziert folgendes:
./datumskopie.sh /home/USER/datum /tmp/datum
`/home/USER/datum/test1' -> `/tmp/datum/test1.20080822'  
`/home/USER/datum/test1.000' -> `/tmp/datum/test1.000.20080822'  
`/home/USER/datum/test1.002' -> `/tmp/datum/test1.002.20080822'  
`/home/USER/datum/test1.test' -> `/tmp/datum/test1.test.20080822'  
`/home/USER/datum/test1.zip' -> `/tmp/datum/test1.zip.20080822'  


Für Ordnerstrukturen müsstest du alle ordner inkl. unterordner per ls auflisten, dateien Filtern, dateinamen erweitern und die ordner im zielpfad anlegen. Dauert mit jetzt zu lange face-smile.
Member: datasearch
datasearch Aug 22, 2008 at 17:19:33 (UTC)
Goto Top
Ich habe gerade noch ein wenig probiert. Du kannst einfach mit find alle Verzeichnisse im Quellpfad suchen, den passenden ordner im Zielpfad anlegen (wenn nicht vorhanden) und für den jeweiligen Ordner das obige Script ausführen. Ein ansatz währe:

# Parameter1: Mitgliedsname

QUELLPFAD=/var/projekte
ZIELPFAD=/srv/www/vid

find $QUELLPFAD/$1/* -type d | while read f; do
 ORDNER=$(echo $f | cut -b 2-)
 ...
 CODE HIER ERGÄNZEN :-)
 ...
done
Member: sergi62
sergi62 Aug 25, 2008 at 16:08:22 (UTC)
Goto Top
Hallo, erst mal vielen Dank für deine schnelle Antwort. Ich konnte es erst heute ausprobieren. Leider funktioniert es noch nicht so ganz.
Ich bekomme nicht einmal eine Fehlermeldung.

1) In deinem Beispiel kopierst du alle Dateien, die hinter dem Verzeichnis Datum hinterlegt sind . Muss ich die gleiche Datenstruktur sowohl auf dem Quellpfad als auch auf dem Zielpfad benutzen?
2) Kann ich alles was zum Beipiel hinter /projekte/ hinterlegt ist, auf einen Schlag auf den Zielpfad kopieren? und dies gleichzeitig mit Datum erweitern?

HIer noch mal der Code.

#!/bin/bash
QUELLPFAD=/var/projekte
ZIELPFAD=/srv/www
find $QUELLPFAD/$1/* -type d | while read f; do
ORDNER=$(echo $f | cut -b 2-)
if [[ -d $1 && ! -z $1 ]]; then
if [[ -d $2 && ! -z $2 ]]; then
erweiterung=$(date +%Y%m%d)
ls -1 $1 | while read a; do
cp -v $1/$a $2/$a.$erweiterung
done
else
echo FEHLER 2
exit 1
fi
else
echo FEHLER 1
exit 1
fi
done

Ich hoffe, dass ich mich klar ausgedrückt habe, sonst kann ich dir vielleicht noch mal eine Mail schreiben.
Vielen Dank
Serg
Member: datasearch
datasearch Aug 26, 2008 at 07:02:55 (UTC)
Goto Top
1) In deinem Beispiel kopierst du alle Dateien, die hinter dem Verzeichnis Datum hinterlegt sind . Muss ich die gleiche Datenstruktur sowohl auf dem Quellpfad als auch auf dem Zielpfad benutzen?

Jepp. Das script sollte alle DATEIEN im Ordner $1 (ERSTER PARAMETER BEI SCRIPTAUSFUF!) nach $2/dateiname.datum kopieren. $2 (Zweiter Parameter bei Scriptaufruf)

Startest du also datum.sh mit den Parametern projekt211 projekt 123, kopiert das Script alle Dateien im Ordner projekt211/* nach projekt 123/*.datum.

Habe es gerade nochmal auf einer SuSE Kiste probiert. Läuft.

2) Kann ich alles was zum Beipiel hinter /projekte/ hinterlegt ist, auf einen Schlag auf den Zielpfad kopieren? und dies gleichzeitig mit Datum erweitern?

Das zweite Script sollte das erledigen. Es sollte im ordner $QUELLE/$1 alle Unterordner auflisten und in der While-Schleife durcharbeiten. Hier könnte das 1. Script aufgerufen werden. Ich wollte dir nur eine Möglichkeit und keine Lösung präsentieren, damit du auch etwas dabei lernst face-smile.