2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Macs
Beiträge: 27
Registriert: 19.02.2009 10:54:21

2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von Macs » 11.06.2010 23:49:06

Hallo,

ich habe mich gerade ein wenig mit der shell beschäftigt und wollte ein kleines Backupprogramm schreiben, komme aber nicht so richtig weiter.
1. Ich schiebe die Backupdatei auf das FTP Laufwerk. Nun möchte ich die Größe vom Verzeichnis haben($lokalfilesize).
2 Danach möchte ich eine Mail mit einem Zeilenumbruch erhalten, das ganze sieht dann etwa so aus:

Code: Alles auswählen

#!/bin/sh
zeit1=`date`
lokal_file=/backup/backupfiles/backupfile
remote_file=/backup/backupfile
ftp -n <<EOFTP
open 10.10.10.10
user user password
bin
put $lokal_file $remote_file
$lokalfilesize=du -b /backup
quit
EOFTP
echo "Zeit: " $zeit1 ZEILENUMBRUCH "Verzeichnisgröße: " $filesize | mail -s "BlaBla" meine@email.tld

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von rendegast » 12.06.2010 03:44:30

Code: Alles auswählen

...
put $lokal_file $remote_file
$lokalfilesize=du -b /backup
quit

Soll in 'lokalfilesize' die Größe des ftp-Verzeichnisses landen?
Dann eher die Verzeichnisauflistung in die lokale Datei /tmp/remote_backup_ls
(Braucht eine Bestätigung, eventuell durch ein ENTER mittels einer Leerzeile im Kommandotext?)

Code: Alles auswählen

...
put $lokal_file $remote_file
ls /backup /tmp/remote_backup_ls

quit
Diese Datei wird nach der ftp-session mit awk analysiert:

Code: Alles auswählen

lokalfilesize="$(cat /tmp/remote_backup_ls | awk '{print SUM+=$5}' | tail -n1)"
echo "$lokalfilesize"
Oder soll in 'lokalfilesize' die Größe des lokalen Verzeichnisses landen, dann scheint mit der Syntax falsch:

Code: Alles auswählen

$lokalfilesize=du -b /backup
Wiederum nach der ftp-session

Code: Alles auswählen

lokalfilesize="$(du -sb /backup)"
echo "$lokalfilesize"

Alternativ:
lokalfilesize="`du -sb /backup`"


Der Zeilenumbruch:

Code: Alles auswählen

echo "
Zeit: $zeit1
Verzeichnisgröße: $filesize
" | mail -s "BlaBla" meine@email.tld
Zeilenumbrüche auch in Variablen:

Code: Alles auswählen

Liste="
ab
bc
cd
de
"
echo $Liste
echo "$Liste"
Allgemein: Variablen sollten bei der Ausgabe resp. Verwendung immer gequotet werden.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Macs
Beiträge: 27
Registriert: 19.02.2009 10:54:21

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von Macs » 12.06.2010 14:46:34

Erstmal vielen dank für die ausführliche Antwort.
Das mit den Zeilenumbrüchen funktioniert.

Eigentlich wollte ich die Größe der hochgeschobenen Datei, um zu überprüfen, ob sie komplett hochgeschoben wurde.
Das mit der Auflistung des Verzeichnisses ist auch eine gute Idee, macht aber ebenfalls Probleme.

Code: Alles auswählen

ftp -n <<EOFTP
open 10.10.10.10
user user password
bin
ls /backup /backup/remote_backup_ls
quit
EOFTP
output to local-file: /backup/remote_backup_ls? server:/backup/scripte#
Er legt die Datei aber nicht an, weder im /tmp noch im /backup. Die Nachfrage kommt.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von rendegast » 12.06.2010 18:42:32

Gerade ausprobiert, es funktioniert mit der Leerzeile, die Abfrage zu beantworten:

Code: Alles auswählen

ftp -n <<EOFTP
open 10.10.10.10
user user password
bin
ls /backup /backup/remote_backup_ls
quit
EOFTP
output to local-file: /backup/remote_backup_ls? server:/backup/scripte#
->

Code: Alles auswählen

ftp -n <<EOFTP
open 10.10.10.10
user user password
bin
ls /backup /backup/remote_backup_ls

quit
EOFTP
Und die Zieldatei wird angelegt.

Eventuell hat Dein Skript keine Schreibrechte auf dem lokalen /backup ?
Deshalb solltest Du auch

Code: Alles auswählen

ls /backup /tmp/remote_backup_ls
versuchen, da dort jeder Schreibrechte hat.

Gibt der Server eventuell keine Auflistung aus, 'ls /backup' mal ohne Angabe einer Zieldatei versuchen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Macs
Beiträge: 27
Registriert: 19.02.2009 10:54:21

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von Macs » 13.06.2010 10:38:48

Der Server gibt keine Auflistung zurück.
Habs gerade noch mit einem anderen FTP server probiert und da funktioniert es problemlos. Mit dem FTP Server erstellt er auch die Datei unter /backup

Habe nun auf lftp umgeschwänkt und da bekomme ich auch Werte zurück gegeben

Code: Alles auswählen

echo du -hs . | lftp -u user,password 10.10.10.10
echo du -hs /backup/backupfile7.xml | lftp -u user,password 10.10.10.10
echo ls -l /backup  | lftp -u user,password 10.10.10.10
Ausgabe

Code: Alles auswählen

18G     .                                                                                       
0       /backup/backupfile7.xml                     
-rw-rw-r--   1 68755    users           0 Jun 12 04:53 backupfile6.xml
-rw-rw-r--   1 68755    users           0 Jun 13 05:12 backupfile7.xml
Nun wäre nun noch die Frage wie ich diese Werte in einer Variable bekomme?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von rendegast » 13.06.2010 19:42:27

Code: Alles auswählen

..
    echo ls -l /backup  | lftp -u user,password 10.10.10.10
Ausgabe

Code: Alles auswählen

...
    -rw-rw-r--   1 68755    users           0 Jun 12 04:53 backupfile6.xml
    -rw-rw-r--   1 68755    users           0 Jun 13 05:12 backupfile7.xml
Nach einem der Beispiele oben:

Code: Alles auswählen

    echo ls -l /backup  | lftp -u user,password 10.10.10.10 | \
awk '{print SUM+=$5}' | tail -n1)"
werden die Dateigrößen (hier zweimall Null) addiert.


Oder

Code: Alles auswählen

echo du -hs /backup/backupfile7.xml | lftp -u user,password 10.10.10.10
'-h' fuer "human-readable", dadurch können Mischwerte ausgegeben werden, besser scheint mir

Code: Alles auswählen

echo du -ks /backup | lftp -u user,password 10.10.10.10 | awk '{print $1}'
Dann ist die Ausgabe eine reine Zahl (für die Weiterverarbeitung)



Die Ausgabe eines Befehls in eine Variable:

Code: Alles auswählen

AUSGABEWERT="$(Befehl)"
Etwas aufwändiger unter Windows-Shell:

Code: Alles auswählen

FOR /F %%i IN ('dir /b *.txt') DO (
  set LAST_TXT=%%i
)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Macs
Beiträge: 27
Registriert: 19.02.2009 10:54:21

Re: 2 Fragen zum Zeilenumbruch und Verzeichnisgröße

Beitrag von Macs » 13.06.2010 22:28:12

Vielen Dank für die vielen ausführlichen Antworten.
Das Testscript funktioniert, heute Nacht werde ich mal schau'n ob alles so läuft wie ich es mir vorstelle. :THX:

Antworten