[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Backups von Punktdateien oder -verzeichnissen



On Mon, 07 Apr 2003 at 11:30 (+0200), Christian Knoke wrote:
> On Mon, Apr 07, 2003 at 09:31:05AM +0200, Michael Tuschik wrote:
> > 
> > > -----Ursprungliche Nachricht-----
> > > Von: Dirk Haage [mailto:dh@a-n-t-s.de]
> > > Gesendet: Sonntag, 6. April 2003 00:33
> > > 
> > > 
> > > On Wed, 2 Apr 2003 12:58:35 +0200 Michael Tuschik wrote:
> > > 
> > > > tar cfz xx.tar.gz .[a-z]*
> > > > 
> > > > oder:
> > > > 
> > > > tar cfz xx.tar.gz .[a-zA-Z0-9]*
> > > 
> > > das ist aber anstrengend
> > > 
> > > tar fz xx.tar.gz .??* 
          ^ typo? Da fehlt ein c

> > > 
> > > tuts wunderbar
> > 
> > Womit ein Verzeichnis ".a" wunderbar ubergangen wird :o)
> 
> echo .[^.]*

Womit alles, was mit .. anfängt (also zum Beispiel ..a) wunderbar
übergangen wird ;-)

IMHO muss man beide Muster angeben, wenn man wirklich sicher sein
will (obwohl die Wahrscheinlichkeit solcher Namen eher gering ist):
tar czf xx.tar.gz .[^.] .??*

Unschön ist dabei nur, dass eine Fehlermeldung erscheint, wenn für
ein Suchmuster keine passende Datei existiert (die Shell expandiert
dann das Muster nicht, sondern übergibt das Muster selbst) und tar
mit einem Fehler beendet wird (ärgerlich vor allem dann, wenn dieser
Returncode z. B. in einem crontab zur Auswertung gebraucht wird).

Das kann man nur umgehen, wenn man vorher prüft, ob es passende
Dateinamen gibt - etwa so:
f=*
test "$f" = "*" || m="*"
f=.[^.]
test "$f" = ".[^.]" || m="$m .[^.]"
f=.??*
test "$f" = "..??*" || m="$m .??*"
tar czf xxx.tar.gz $m

Genauso kann man natürlich gleich eine Dateiliste aufbauen:
tar czf xxx.tar.gz `ls -ad * .??* .[^.] 2>/dev/null`
Jetzt wird der Fehler schon im ls wirksam und dem tar wird eine
gültige Dateiliste übergeben. Das geht aber nur dann, wenn im zu
sichernden Baum keine Dateinamen mit Leerzeichen auftauchen.

Jan



Reply to: