Re: mtree auf drei Verzeichnisebenen begrenzen

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 11 May 2011 17:52:39 +0200 (CEST)

Marc Santhoff wrote:
> Am Mittwoch, den 11.05.2011, 11:16 +0200 schrieb Oliver Fromme:
> > Mir ist nicht vollkommen klar, warum Du das tun möchtest,
> > vorausgesetzt, ich habe Dich überhaupt richtig vestanden.
>
> Simple Sache schwer zu erklären:
>
> Es gibt bereits mehrere Backup-Platten (extern, USB) die mit Daten
> befüllt sind. Manchmal muß eine gewechselt werden oder es kommt eine
> Platte dazu. Auch bei einem Wechsel werden die Altdaten nciht kopiert.
>
> Bevor ich die Backup- und Kopierskripte benutzen kann, müssen alle Pfade
> vorhanden sein, was mittlerweile eine Menge sind.

Ok ... Mein Backup-Skript legt die Pfade (/backup/$host/$datum)
immer selbst an.

> > Aber Deiner Beschreibung nach sollte das folgende Kommando
> > das Gewünschte tun:
> >
> > # cd $WURZEL
> > # echo '*/*/*/*' | mtree -cin -X /dev/stdin > mydist.mtree
> >
> > Damit bekommst Du die Verzeichnisse bis in die dritte Ebene
> > (die vierte Ebene wird vom vierten Stern ausgeschlossen).
>
> Ah ja, das sieht sehr gut aus. Testen kann ich erst späeter ...
> Auf echo wäre ich z.B. als letzte gekommen.

Das echo ist nur ein »work-around« dafür, dass man Excludes
bei mtree nicht direkt angeben kann, sondern dass bei der
Option -X einen Dateiname erwartet wird, wo die Excludes
drin sind. Man könnte auch eine temporäre Datei verwenden,
die nur die Zeile »*/*/*/*« enthält.

Manche Shells bieten auch eine Möglichkeit, auf der Kommando-
zeile Strings direkt als Datei zu verfüttern. Bei der zsh
geht das z.B., indem man einen sogenannten here-string "<<<"
mit process-substitution "=()" verknüpft:

# cd $WURZEL
# mtree -cin -X =(<<<*/*/*/*) > mydist.mtree

Übrigens: Wenn man einfach nur ein »Skelett« von Verzeich-
nissen kopieren möchte, geht das auch ganz ohne mtree. Das
Tool find(1) hat eine Option für die Verzeichnistiefe. Die
Ausgabe davon kann man dann an mkdir (via xargs) füttern:

# cd $WURZEL_ALT
# find . -type d -depth -4 > mydirs.txt
# cd $WURZEL_NEU
# xargs mkdir < mydirs.txt

-depth -4 bedeutet »Tiefe kleiner als vier«. Nachteil:
mtime und permissions werden nicht kopiert. Aber ich denke,
dass das in Deinem Fall nicht schlimm ist.

Wenn man mtime und permissions mitkopieren möchte, könnte
man cpio bemühen:

# cd $WURZEL_ALT
# find . -type d -depth -4 | cpdio -dump $WURZEL_NEU

Nachteil hierbei: Das geht nur in einem Rutsch. Man kann
nicht den Verzeichnisbaum erst in einer Textdatei speichern
(wie bei mtree), um ihn später zu erzeugen.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"One of the main causes of the fall of the Roman Empire was that,
lacking zero, they had no way to indicate successful termination
of their C programs."
        -- Robert Firth
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 11 May 2011 - 17:53:00 CEST

search this site