frage - script 2 zeiler in eine zeile ausgeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

frage - script 2 zeiler in eine zeile ausgeben

Beitrag von Huck Fin » 24.03.2008 10:35:32

ich will folgende 2 Zeilen

Code: Alles auswählen

echo "zu sichern sind" >>~/backuplog
du -sb test 2>&1 |tee >>~/backuplog
in der Datei Backuplog in einer Zeile ausgeben.

d.h.
momentan steht da

Code: Alles auswählen

zu sichern sind
123456
ich möchte aber

Code: Alles auswählen

zu sichern sind 123456
als ergebniss.
Ich bekomme es nicht hin.
habe mit \c und /c schon probiert.
Wie muss das Script nun richtig lauten ?

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 24.03.2008 10:38:31

verwende `echo -n'
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 10:44:23

Cool, danke..

Hab noch ein Problem.

wenn ich

Code: Alles auswählen

du -sb test
eingebe bekomme ich 1235595 byte angezeigt.

wenn ich

Code: Alles auswählen

tar -czf /home/xxx/abc.tar.gz /home/test --totals 
eingebe erhalte ich 1249280 byte angezeigt.

Wieso sind die zahlen so unterschiedlich ?
mach ich was falsch ?

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 24.03.2008 11:17:46

Huck Fin hat geschrieben:wenn ich

Code: Alles auswählen

du -sb test
eingebe bekomme ich 1235595 byte angezeigt.

wenn ich

Code: Alles auswählen

tar -czf /home/xxx/abc.tar.gz /home/test --totals 
eingebe erhalte ich 1249280 byte angezeigt.

Wieso sind die zahlen so unterschiedlich ?
mach ich was falsch ?
Du lässt dir da verschiedene Dinge anzeigen.
man tar hat geschrieben: --totals
display total bytes written after creating an archive
das sollte also die Größe des Archivs sein (also das Gleiche wie `ls -l test.tar.gz')
Use ed once in a while!

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 11:44:55

Meinst du ??

Das Archiv ist aber viel kleiner.
618844 kbyte

ich hab das so verstanden...
--totals sind die geschriebenen kb

Also genau der Inhalt meiner Quelle, wenn ich mich nicht täusche.

Benutzeravatar
Meillo
Moderator
Beiträge: 9267
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Beitrag von Meillo » 24.03.2008 11:51:45

hmm ... dann habe ich keine Ahnung
Use ed once in a while!

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 24.03.2008 12:07:22

Huck Fin hat geschrieben:Meinst du ??

Das Archiv ist aber viel kleiner.
618844 kbyte
Du hast es noch mittels gzip komprimiert. gunzip und der Wert sollte passen.
Das tar Archiv muss leicht größer sein, da nicht nur der Dateiinhalt an sich, sondern auch Rechteinformationen usw. im Archiv landen.
MfG GoKi
:wq

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 12:35:08

Kann man irgendwie die Anzahl der Dateien auf /home/test
und die anzahl der Dateien im Archiv in eine Datei ausgeben lassen ?

so z.b.
Anzahl der Dateien in /home/test = 195
Anzahl der Dateien in /home/xxx/abc.tar.gz = 195

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 24.03.2008 12:49:02

Code: Alles auswählen

find . | wc -l
tar -tf datei.tar.gz | wc -l
MfG GoKi
:wq

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 13:09:31

Cool

1000 Dank... :hail:

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 13:38:28

Und noch eine Frage...

ich habe immer ein Leerzeichen zwischen den Variablen, wenn ich $zieldir $zielfile verwende

also /home/ abc.tar.gz

wie kann ich das umgehen ?

Gibt es nen guten Link zu scriptfragen?

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 24.03.2008 13:49:25

Huck Fin hat geschrieben:ich habe immer ein Leerzeichen zwischen den Variablen, wenn ich $zieldir $zielfile verwende
Wieso probierst nicht mal

Code: Alles auswählen

echo $zieldir$zielfile
8)
bzgl Bash-Scripts gibt es bspw. http://tldp.org/LDP/abs/html/index.html
MfG GoKi
:wq

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 24.03.2008 21:11:52

Cool, hat sofort funktioniert.

Ich hoffe ich nerve nicht, aber...

Habe mir ein Script gebastelt, dass überprüft ob Dateien /subdirs da sind.
Wenn welche da sind, soll es schauen, wie alt die Dateien / subdirs sind.
Wenn älter als x Tage, sollen die alten gelöscht werden.

Klappt auch alles prima, bis auf...
Wenn ich mehr als ein subdir /datei habe kommt ein Fehler.
binary operator expected

Hier mal das Script, allerdings mit "aelter als 1 minute"

Code: Alles auswählen

#!/bin/sh
dateien=/home/backup/*
if [ -d $dateien ] 
then
echo lösche dateien
rm -rf `find /home/backup/* -mmin +1`
else
echo Nix mehr zum loeschen da
fi
echo 


Ich find den Fehler nicht.
Wie gesagt es geht wenn nur eine Datei / subdir existiert fehlerfrei


nachtrag

Mir reicht auch die abgespeckte Version.

Code: Alles auswählen

#!/bin/sh
rm -rf `find /home/backup/* -mmin +1`
echo 


aber mich stört die Fehlermeldung wenn subdir leer.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 25.03.2008 00:22:58

Du kannst dir von find direkt alle Unterordner auflisten lassen und dann über das Ergebnis eine Schleife laufen lassen bzw nur wenn es einen Unterordner gibt fortfahren.
Du kannst nicht an test -d eine Liste von Dateien/Ordnern übergeben, daher erscheint die Fehlermeldung.

btw.

Code: Alles auswählen

rm -rf `find /home/backup/* -mmin +1`
würde ich über xargs lösen, um eine zu lange Argumentliste zu umgehen. Dies kann auftreten, wenn unter /home/backup sehr viele Dateien auf das Suckkriterium passen.
MfG GoKi
:wq

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Beitrag von ThorstenS » 25.03.2008 01:34:19

find kennt unter etch schon den Schalter -delete (in der englischen manpage stehts drin)

Benutzeravatar
Huck Fin
Beiträge: 1210
Registriert: 10.03.2008 17:10:30

Beitrag von Huck Fin » 25.03.2008 08:22:21

Hab das jetzt so gelöst...

Code: Alles auswählen

subdir=/home/backup
if [ -s $subdir/* ]
then
 echo ALTE DATEN WERDEN GELOESCHT
 rm -rf `find $subdir/* -mtime +7 `
else
 echo NIX ZU LOESCHEN DA
fi
Klappt jetzt wunderbar...

Danke nochmal für die Hilfe
Über Google findet man nicht alles.

Antworten