Datei erkennen und umbennen

Post Reply
Message
Author
Carsten NRW

Datei erkennen und umbennen

#1 Post by Carsten NRW »

Hallo zusammen

Ich habe folgendes Problem:
Ich habe einen Ordner TEST
In diesem Ordner TEST gibt es einen Ordner SICHERUNG
In beiden Ordnern befindet sich eine Daeit mit selben,variablen Namen und immer gleicher Endung. (zb. 12345.tes)
Das skript sollte folgendes tun.
Es soll in beiden Ordnern nachgucken ob es identische Dateien gibt und dann im Ordner SICHERUNG die Dateiendung von *.tes auf *.sic ändern.

Wer kann mir helfen

Danke Carsten

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#2 Post by Lateralus »

Bei kleinen Dateien geht das schnell. Bei größeren wird man vielleicht einen einfacheren checksum-Algorithmus verwenden wollen.

Code: Select all

cd TEST

for file in $(find . -type f -maxdepth 1 -iname *.tes); do
  # Wenn die Sicherungsdatei existiert
  if [ -e SICHERUNG/"$file" ]; then
    # und die gleich Prüfsumme haben
    if [ "$(md5sum $file)" = "$(md5sum SICHERUNG/"$file")" ]; then
      # Erzeuge neuen Namen aus $file und ersetze ".tes" durch ""
      new_name = $( echo $file | awk ' { sub(".tes", "") } ' )
      mv SICHERUNG/"$file" SICHERUNG/"$new_name".sic
    fi
  fi
done
Dieses Skript tut ein bisschen mehr. Es wendet die besprochene Regel auf jede Datei im Verzeichnis an, die auf .tes endet. Es gibt dabei ein paar Probleme, welche du hier:
http://www.prolinux.de/forum/viewtopic.php?t=1028739
nachlesen kannst.

demon
Pro-Linux
Posts: 389
Joined: 24. Nov 1999 0:05
Location: Wörth am Rhein
Contact:

#3 Post by demon »

Wie waere es, wenn wir einen Sticky-Thread hier machen wuerden, in den jeder seine Mini-Scripte posten kann. Wuerde wohl vor allem Anfaengern helfen, die Bash besser zu verstehen/nutzen. Natuerlich muessten die Aktionen aehnlich dem letzten Tipp kommentiert sein.

Gruss
demon

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#4 Post by Lateralus »

<OT>
@demon: Ich finde die Idee gut.
</OT>

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#5 Post by kanonenfutter »

@Lateralus:
> Bei kleinen Dateien geht das schnell. Bei größeren wird man vielleicht einen einfacheren checksum-Algorithmus verwenden wollen.

hmm, aber md5sum muss ja auch die ganze datei durchlesen, da würde es mich wundern, wenn das schneller wäre als ein simples "diff".
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#6 Post by Lateralus »

@kanonenfutter
Hab ich nicht recht verstanden. Was ist nun schneller?

Ich bezog mich eher darauf, dass man Programme, wie sum oder cksum benutzen könnte, welche garantiert schneller als md5sum sind.

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#7 Post by kanonenfutter »

@Lateralus:
> Hab ich nicht recht verstanden. Was ist nun schneller?
> Ich bezog mich eher darauf, dass man Programme, wie sum oder cksum benutzen könnte, welche garantiert schneller als md5sum sind.

und ich meinte, dass man überhaupt kein checksum-programm sondern einfach diff benutzen sollte ;-)
man müsste man das natürlich im einzelnen nachprüfen, aber generell kann man doch davon ausgehen, dass es *immer* langsamer ist, eine checksumme zu berechnen als nur das file anzuschauen. diff hat aber vor allem noch einen anderen vorteil: während du beim checksummen-bilden *immer* die ganze datei lesen musst, ist diff bereits beim ersten auftreten eines unterschieds fertig. das mag im vorliegenden fall keinen grossen unterschied machen, aber es spricht eben gar nichts dafür, eine checksumme zu verwenden.
mit diff wird die abfrage auch etwas einfacher:

Code: Select all

 if diff -q $file SICHERUNG/$file; then
Last edited by kanonenfutter on 11. Jun 2005 17:45, edited 1 time in total.
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#8 Post by Lateralus »

Gute Idee. Ich wusste gar nicht, dass diff eine Option besitzt, die nur darauf hinweist, dass ein Unterschied existiert und dadurch nicht die komplette Datei durchschauen muss.

kanonenfutter
Posts: 266
Joined: 10. Sep 2004 14:37
Contact:

#9 Post by kanonenfutter »

ok, du bist also mit meinem vorschlag einverstanden. damit würde das skript so aussehen (beachte: ich lasse die prüfung, ob die datei existiert weg, da diff das sowieso auch prüft).

Code: Select all

#!/bin/bash
cd TEST/SICHERUNG

for file in *.tes; do 

    # gleiche dateien in beiden pfaden?
    if diff -q $file ../$file > /dev/null; then

        # Erzeuge neuen Namen aus $file und ersetze ".tes" durch "" 
         newname="$&#123;file%.tes&#125;.sic" 
         mv "$file" "$newname"
    fi 
done
oder wenn es etwas kürzer sein soll:

Code: Select all

#!/bin/bash
cd TEST/SICHERUNG

for file in *.tes; do 

    diff -q $file ../$file > /dev/null && mv "$file" "$&#123;file%.tes&#125;.sic" 

done
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/

Post Reply