Du suchst ein Programm für einen bestimmten Zweck?
-
alexpetri
- Beiträge: 49
- Registriert: 30.01.2006 14:42:32
Beitrag
von alexpetri » 07.12.2006 13:11:44
Hallo,
ich habe mir ein Skript gebastelt was mir per cronjob aufruf alle 10 min
alle geänderten datein der letzten 10 Minuten in ein neues verzeichnis kopiert
Problem ist das SRC mehrere unterverzeichnisse hat und irgendwie legt er die Unterverzeichnisse nicht an, sondern kopiert alles in eine ebene. wie geht das?
Code: Alles auswählen
#!/bin/sh
# defs
SRC=/var/www/wiki
DST=/var/wiki_backup
T=`date +%F_%H-%M`
NEWDIR=$DST"/"$T
# execute
mkdir $NEWDIR
cd $SRC
find -mmin -10 -exec cp {} $NEWDIR \;
wenn ich -R hinter cp schreibe kopiert er mir alles...
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 07.12.2006 13:30:23
ungetestet:
Code: Alles auswählen
cd "$SRC"
find -mmin 10 -type f | while read file; do
DN=`dirname "$file"`;
[ -d "$DST/$DN" ] || mkdir "$DST/$DN"
cp "$file" "$DST/$DN/"
done
[edit]
statt DST, solltest/möchtest du wahrscheinlich deine "NEWDIR" variable einsetzen
[/edit]
Gruß
gms
-
alexpetri
- Beiträge: 49
- Registriert: 30.01.2006 14:42:32
Beitrag
von alexpetri » 07.12.2006 14:31:30
danke
habs mal ein bissl angepasst:
Code: Alles auswählen
#!/bin/sh
# defs
SRC=/var/www/wiki
DST=/var/wiki_backup
T=`date +%F_%H-%M`
NEWDIR=$DST"/"$T
# execute
mkdir $NEWDIR
cd $SRC
find -mmin -10 -type f | while read file; do
DN=`dirname "$file"`;
[ -d "$NEWDIR/$DN" ] || mkdir "$NEWDIR/$DN"
cp "$file" "$NEWDIR/$DN/"
done
cd $NEWDIR
if [ `ls -1a|wc -l` -gt 2 ]; then echo "Verzeichnis angelegt";else rmdir $NEWDIR; fi
in den letzten zeilen wird das verzeichnis wieder gelöscht falls es leer ist- um ein wenig den Überblick zu behalten...
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 07.12.2006 14:50:37
Ist mir gerade noch aufgefallen
sollte durch
ersetzt werden
Das brauchst du eigentlich nicht:
und wenn du diese Zeile wegläßt, kannst du dir diese auch ersparen:
Code: Alles auswählen
cd $NEWDIR
if [ `ls -1a|wc -l` -gt 2 ]; then echo "Verzeichnis angelegt";else rmdir $NEWDIR; fi
Gruß
gms
-
alexpetri
- Beiträge: 49
- Registriert: 30.01.2006 14:42:32
Beitrag
von alexpetri » 07.12.2006 15:36:26
wozu brauche ich das "-p"
wer aus den man pages nicht so ganz schlau
-
LessWire
- Beiträge: 558
- Registriert: 21.11.2004 04:36:04
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Bavaria
Beitrag
von LessWire » 07.12.2006 17:10:18
Hilft Dir ein "cp -P" ? Mit grossem P ! Dann sollten eigentlich alle Unterverzeichnisse des SRC-Dirs an das DST-Dir angehängt und die Files entsprechend kopiert werden.
Zuletzt geändert von
LessWire am 07.12.2006 19:07:04, insgesamt 1-mal geändert.
at ~ now.
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 07.12.2006 17:29:51
alexpetri hat geschrieben:wozu brauche ich das "-p"
wer aus den man pages nicht so ganz schlau
ohne "-p" kann mkdir Verzeichnisse nur dann anlegen, wenn das darüberliegende Verzeichnis schon existiert. Nach dem diese Vorraussetzung aber in deinem Script nicht gewährleistet ist, brauchst du das "-p".
Gruß
gms
-
alexpetri
- Beiträge: 49
- Registriert: 30.01.2006 14:42:32
Beitrag
von alexpetri » 10.12.2006 15:09:03
danke nochmal an alle...
eine frage hätte ich dann doch noch:
ich würde gerne alle Ordner die älter sind als heute zippen
gibt es da eine schnelle lösung das mit in das skript zu schreiben?
in etwa so dachte ich das:
Code: Alles auswählen
ZU_SICHERNDE_ORDNER=`date --date='1 day ago' +%F`
tar ??? $ZU_SICHERNDE_ORDNER".tar.gz" $ZU_SICHERNDE_ORDNER*
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 10.12.2006 18:26:01
ungefähr so:
Code: Alles auswählen
ARCHIVE="$DST/$ZU_SICHERNDE_ORDNER.tar.gz"
if [ ! -f "$ARCHIVE" ] && ls -d $DST/$ZU_SICHERNDE_ORDNER\_??-?? &>/dev/null; then
tar --remove-files -czvf "$ARCHIVE" $DST/$ZU_SICHERNDE_ORDNER\_??-??
fi
Gruß
gms