Hallo Leute, leider muß ich mal wieder feststellen, nur unzureichend über scripting bescheid zu wissen. Ich will folgendes realisieren: alle dateien, die in verz. A nicht enthalten sind, aber in verz. B existieren, sollen in B gelöscht werden. Bis jetzt ist mein Lösungsansatz: 1. ermitteln von allen Dateien in B per "find /verz/B -type f -print" 2. via for each schleife jede ausgegebene Zeile von find bearbeiten 3. von der Zeile, die von find ausgegeben wurde, brauche ich aber nur den hinteren Teil, den Dateinamen und den zu /verz/B relativen Pfad. Beispiel: find gibt aus: /verz/B/unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^ ich brauche: /unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^^ WIE MACHE ICH EINE SOLCHE UMWANDLUNG???????????????????????????????????? 4. testen, ob /verz/A/unterverz/datei.dat existiert, wenn nicht dann ^^^^^^^^^^^^^^^^^^^ lösche /verz/B/unterverz/datei.dat Wo finde ich darüber infos? Gehts auch besser bzw. direkter? Hoffe ich habe mich verständlich ausgedrückt. Danke für jegliche Hilfestellung, Sebastian Weber -- Um aus der Liste ausgetragen zu werden, eine Mail an majordomo@suse.com schicken, mit dem Text: unsubscribe suse-linux
On Wed, 18 Nov 1998, Sebastian Weber wrote:
find gibt aus: /verz/B/unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^ ich brauche: /unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^^ WIE MACHE ICH EINE SOLCHE UMWANDLUNG????????????????????????????????????
Repariere erstmal Deine Tastatur. Shift klemmt und '?' prellt ... Oder schreist Du uns etwa an ? Dann: ABASE=/verz/A BBASE=/verz/B find $ABASE ... -print | \ while read FNAME; do SUFFIX=$( echo $FNAME | sed "s,$BASE,," ) BNAME=$BBASE$SUFFIX if [ -f $BNAME ]; then ... fi done
Wo finde ich darüber infos?
In jedem Buch ueber Shellprogrammierung.
Gehts auch besser bzw. direkter?
Wenn man PERL kann, geht's damit eleganter und einheitlich -- man bleibt im Perl und braucht fast keine extra Tools, man kreiert nicht pausenlos neue Prozesse, es funktioniert auch auf anderen Plattformen, ... G.Sittig@abo.FreiePresse.DE -- If you don't understand or are scared by any of the above ask your parents or an adult to help you. -- Um aus der Liste ausgetragen zu werden, eine Mail an majordomo@suse.com schicken, mit dem Text: unsubscribe suse-linux
Sebastian Weber wrote:
Hallo Leute,
leider muß ich mal wieder feststellen, nur unzureichend über scripting bescheid zu wissen. Ich will folgendes realisieren:
alle dateien, die in verz. A nicht enthalten sind, aber in verz. B existieren, sollen in B gelöscht werden.
Hi, versuch mal: ...... ODir=`pwd` cd /Verz/B for F in `ls` ; do if [ ! -e /Verz/A/$F ] ; then rm $F fi done cd $ODir ...... ich hoffe, es hilft :-) o long... bernd
Bis jetzt ist mein Lösungsansatz: 1. ermitteln von allen Dateien in B per "find /verz/B -type f -print" 2. via for each schleife jede ausgegebene Zeile von find bearbeiten 3. von der Zeile, die von find ausgegeben wurde, brauche ich aber nur den hinteren Teil, den Dateinamen und den zu /verz/B relativen Pfad. Beispiel: find gibt aus: /verz/B/unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^ ich brauche: /unterverz/datei.dat ^^^^^^^^^^^^^^^^^^^^ WIE MACHE ICH EINE SOLCHE UMWANDLUNG????????????????????????????????????
z.B. so: echo "/unterverz/datei.dat" | awk -F"/" '{ F1=NF-1; print "/"$F1"/"$NF}'
4. testen, ob /verz/A/unterverz/datei.dat existiert, wenn nicht dann ^^^^^^^^^^^^^^^^^^^ lösche /verz/B/unterverz/datei.dat
Wo finde ich darüber infos?
man awk, test, bash, usw. Oder auch in /sbin/conf.d/* (sehr tricky scripte :-))
Gehts auch besser bzw. direkter?
. o.
Hoffe ich habe mich verständlich ausgedrückt.
ich hoffe, ich auch..
Danke für jegliche Hilfestellung,
Oh bitte :-) o long... bernd -- Please try to boot your system outside the system, it maybe the grounding problem. -- Um aus der Liste ausgetragen zu werden, eine Mail an majordomo@suse.com schicken, mit dem Text: unsubscribe suse-linux
participants (3)
-
G.Sittig@abo.FreiePresse.DE
-
Illuminatus@t-online.de
-
williweber@t-online.de