Scriptgesteuert Verzeichnisse verschieben bzw. umbenennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Scriptgesteuert Verzeichnisse verschieben bzw. umbenennen

Beitrag von feltel » 26.05.2004 09:58:36

Hallo, ich weiß momentan nicht, wie ich das folgende Scriptgesteuert lösen kann: Ich hab in einem Verzeichnis Unterverzeichnisse mit unterschiedlichen Namen, die ich nach gewissen Kriterien in eine andere Verzeichnisstuktur verschieben will.

Ich mal das am besten mal auf:

Das habe ich:

Code: Alles auswählen

/ ausgangsverzeichnis
  |- nl_halle
  |- nl_lpz
  |- NL-ABG
  |- grundsch
  |- ...
So sollen die Verzeichnisse danach aussehen:

Code: Alles auswählen

/ zielverzeichnis
  |- nl
  |   |- abg
  |   |- halle
  |   |- lpz
  |
  |- schule
      |- grundschule
      |- schule1
      |- schule2
Nun könnte ich von der Sache her mv für jedes Verzeichnis einzeln aufrufen, was aber sicherlich nicht gerade sehr elegant ist. Ich dachte da an so eine Art Mappingtabelle in der ich das Ausgangsverzeichnis und das Zielverzeichnis reinschreibe und das ich das ganze dann auslese und in einer Schleife abarbeite. Und genau daran hakts :roll:

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 26.05.2004 10:16:07

Code: Alles auswählen

exec <mapfile
read FELD1 FELD2 REST
while [ $? -eq 0 ]
do
  echo mach wat mit $FELD1 $FELD2
  read FELD1 FELD2 REST
done
Gruß
ernohl

Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 26.05.2004 10:34:38

Also so etwa?
Mapfile:

Code: Alles auswählen

NL_ABG nl/abg
nl-lpz nl/lpz
grundsch schule/grundschule

Code: Alles auswählen

exec <Mapfile
read $FELD1 $FELD2
while [ $? -eq 0 ]
do
  mv $FELD1 $FELD2
done

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von mistersixt » 26.05.2004 10:48:38

Wenn Du aber das Mapfile per Hand erstellst, kannst Du es auch gleich per Hand um-moven ;-) ! Vielleicht solltest Du das Mapfile generieren - mit ein wenig grep, cut und sed kannst Du bestimmt die meisten Sachen automatisiert erstellen und dann um-moven.

Gruss, mistersixt.

Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 26.05.2004 10:59:31

Von der Sache her hast Du ja recht. Ich beschreibe einfach mal was ich im Ganzen vorhab:

- Ein Client-PCs pro Standort (mehrere und von zwei verschiedenen Firmen) erstellt mit einem Backupscript wöchtentlich jeweils ein .tar.bz2-Archiv das dann per pscp (Windows-scp-Port) auf einen Server übertragen wird.
- auf dem Server will ich wöchtentlich die Archive entpacken und deren Inhalte dann auf die passenden Verzeichnisse verschieben.
- Die Namen der Archivdateien sind fest, folgen aus hiistorischen Gründen aber keinem festem Benennungsschema (Datei mal in Großbuchstaben, mal mit _ als Trenner, mal mit - als Trenner usw.).

Das Mapfile müsste also nur einmal erstellt werden und nur ggf. angepasst werden.

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 26.05.2004 11:04:34

feltel hat geschrieben:Also so etwa?
Jo. Musst allerdings noch auf die Auswirkungen des Nicht- bzw. Vorhandenseins der Zielverzeichnisse usw. achten.
Aber du hast ja sicher ein Backup. :wink:
Gruß
ernohl

Benutzeravatar
feltel
Webmaster
Beiträge: 10476
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 26.05.2004 11:16:35

Ich hab das jetzt folgendermaßen gemacht und es funktioniert:

Code: Alles auswählen

cd ~/abesdata

# transfer files
scp transferuser@host:~/*.bz2 .

# expanding files
for i in *.bz2
 do
  tar xjf $i
  rm $i
 done

# moving files
while read srcdir dstdir
 do

  if [ -d $srcdir ]; then
   mv $srcdir/* $dstdir
   rm -rf $srcdir
  fi

 done < ~/mapfile
und das Mapfile sieht so aus:

Code: Alles auswählen

NL_ABG /home/abes/wak/abg/cl
grundsch /home/abes/sift/lpz-gs/cl
....

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 26.05.2004 11:38:10

2 Anmerkungen noch:

Deine Methode beschränkt die Umleitung der Standardeingabe auf die Schleife. Dies ist in deinem Beispiel sicher gewollt und ausreichend, manchmal aber unerwünscht.

Ich benutze immer eine zusätzliche Variable pro Zeile (REST). Das erlaubt dir, schmerz- und wahlfrei z.B. Kommentare an deine Zeilen in der Eingabedatei anzuhängen.
Gruß
ernohl

Antworten