PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : directories vergleichen



chrimp
31.07.03, 12:31
hiho

ich mache gerade in einer firma ferienjob und mir wurde eine ****** aufgabe zugeteilt:

ich soll 2 directories vergleichen, ob da darunter liegende ordner evtl doppelt sind.
das prob ist, dass die ordner teilweise eine leerstelle haben und manchmal gleich heißen.

/dic1/000815///////

und

/dic2/00 0815/////

haben z.b. den selben inhalt, was man aber am directory namen sehen kann.
wenn ein directoy in beiden vorhanden ist, soll sie in dic1 gelöscht werden.
so unds dafür suche ich ein prog/script oder befehl oder sonst was.
ich will nämlich nicht alles per hand durchmachen.. ;(

achja, ist eine SUN machine.
ich hoffe es hat einer nen tip!
danke schonmal!

Silver
31.07.03, 13:08
Beherscht du C oder Perl oder sonst eine Sprache?

Denn dann könntest du dir so ein kleines Programm schreiben, das genau dies überprüft. Dürfte (mit ein wenig Nachdenken) nicht schwer sein.

mfG

chrimp
31.07.03, 13:33
C geht einigermaßen, hab aber leider keine ahnung, wie ich da auf directoriey zugreifen könnte........ :(

Silver
31.07.03, 13:45
mit Unixbefehlen wie opendir, readdir und closedir. Hier müsstest du dich, in den Manpages durchwühlen um näheres zu erfahren....

Jedoch würd ich noch warten, bevor ich mit dem programmieren beginnen würde, denn vielleicht gibt es ja schon so etwas, was du brauchst.

//edit: Da dies zwar kein Programmierforum, will ich dir ein Bsp-Prog geben, dass alle Dateien im aktuellen Verzeichnis ausliest!

#include <sys/types.h>
#include <dirent.h> /* für die Struktur "dirent" */

int main(int argc, char **argv)
{
DIR *dirHandle;
struct dirent * dirEntry;

dirHandle = opendir("."); /* oeffne aktuelles Verzeichnis */
if (dirHandle) { /* gibt es überhaupt dieses Verzeichnis? */
while (0 != (dirEntry = readdir(dirHandle))) { /* gehe gesamtes Verzeichnis durch */
puts(dirEntry->d_name); /* Dateiname herausschreiben */
}
closedir(dirHandle);
}
}

chrimp
31.07.03, 13:59
cool, ich danke dir!
werde ich morgen früh gleich mal testen.

Silver
31.07.03, 15:13
wenn du Hilfe beim Programmieren brauchst, dann melde dich.
Wenn ich Zeit habe, dann helf ich dir ein wenig...

mfG

Berufspenner
31.07.03, 15:19
Hi@all

Wenn es um die Programmierung geht: www.mrunix.de unser Schwesterforum.

Cu
André

Der Gestreifte
31.07.03, 15:51
Wieso programmieren?
Vorausgesetzt, es bifindet sich in jedem Verzeichniss jeweils nur ein solches Unterverzeichnis (also "verzeichnis a" oder "verzeichnisa") und die Leerstellen haben keinen Sinn:
In beiden Verzechnissen aus den Unterverzeichnissen die Leerzeichen extrahieren:
for i in *; do mv "$i" $(echo "$i" | tr -d " ")

Anschliessend mit
cd dic2; for DIR in * ; do if [ -d ../dic1/"${DIR##/*}" ]; then rm -rf ../dic1/"$DIR"; fi; done
die Verzeichnisse aus dic1 löschen, die es auch in dic2 gibt.

Aber erstmal mit "rm -i" üben, ist ungetestet.

chrimp
31.07.03, 20:37
hiho

danke erstmal für eure ideen.. :)
werde das morgen alles mal testen
werde aber rm erstmal durch ls ersetzen... ;)
müsste ja gnauso gehen...
thx