Text aus Datei filtern und neuen Ordner erstellen

moosmahna

Mitglied
Thread Starter
Dabei seit
16.03.2010
Beiträge
28
Reaktionspunkte
0
Hi zusammen

Ich bin jetzt lange auf der Suche gewesen aber ich habe noch keine brauchbaren Ergebnisse gefunden
Ich habe folgende Situation:
In einem Ordner auf meinem Schreibtisch sind sehr viele Dateien. Da sie von Klienten kommen haben sie immer einen bestimmten Text am Anfang.
Z.B. hh12 001, hh12 002 usw. Nach der Klientenbezeichnung kommt immer ein Leerzeichen!!!
Ich bräuchte jetzt ein Script das folgendes macht:
Die ganzen Dateien nach dem Text bis incl. des Leerzeichen suchen und mit dem gleichem Text bis incl des Leerzeichens einen Ordner erstellen. Z.B. hat der Ordner vom obigen Beispiel den Titel hh12. Alle Dateien die am Anfang "hh12" haben sollen nun in diesen Ordner hineinkommen.
Ist so etwas machbar?
Vielen Dank für Eure Hilfe
 
klar, mit nem kleinen Shellscript.
In einer for-Schleife alle Dateien abarbeiten, mit cut -d " " -f 1 den Teil vor dem Leerzeichen auslesen, Verzeichnis erstellen wenn es noch nicht existiert, und Datei danach in das Verzeichnis verschieben.

Ganz grob so:

Code:
#!/bin/sh
for file in hh*
do
  dir=$(echo $file | cut -d" " -f1)
  test -d $dir || mkdir $dir
  mv $file $dir
done
 
Danke für die rasche Hilfe

Da ich nicht so bewandert bin Codes eine kurze Frage:
Wo muss dieser Code jetzt hin?
 
Oder so:

Code:
for i in "/Pfad/zum/Ordner/"*; 
do mkdir -p "${i% *}"; 
mv "$i" "${i% *}/"; 
done

Das kannst du im Terminal ausführen (vorher natürlich den entsprechenden Pfad anpassen).
 
HMM, ich kann im Terminal den COde nicht eingeben. Was ist da falsch?
 
Du kannst im Terminal keinen Text eingeben? Was erscheint denn im Terminal?
 
Terminal öffnen
Terminal - bash - 80x24 als Überschrift des Fensters

Last Login: Wed blablabla
dann mein Computer Name : MeinName$

Wenn ich den Code kopiere, dann steht:

-bash: : Syntax error near unexpected token ´>´

und 2 Zeilen darunter
-bash: : command not found
 
Füge den Code mal in einer Zeile ein, bei jedem Zeilenumbruch muss dann ein Semikolon am Ende der Zeile stehen. Z.B. so:

Code:
for i in "/Users/Name/Desktop/Dein Ordner/"*;  do mkdir -p "${i% *}";  mv "$i" "${i% *}/";  done
 
Habe einen neuen Befehl erstellt, den Code eingefügt und mit Enter bestätigt:

Nun steht Invalid Argument ?
 
genau steht da:

mv: rename /User/meinname/Schreibtisch/Rec/Klienten/* to /User/meinname/Schreibtisch/Rec/Klienten/*/*: Invalid Argument
 
Dein Pfad stimmt nicht, es sollte so aussehen:

Code:
for i in "/Users/DeinName/Desktop/[COLOR=#000000]Rec/Klienten[/COLOR]/"*;  do mkdir -p "${i% *}";  mv "$i" "${i% *}/";  done
 
Habe Schreibtisch durch Desktop ersetzt. Es kommt immer noch Invalid Argument...
 
Kannst du mal eingeben:

Code:
ls /Users/Name/Desktop/Rec/Klienten

Werden dann deine Dateien angezeigt? Die invalid argument Meldung bedeutet eigentlich, dass er den Pfad nicht finden kann.
 
Ich habe jetzt noch in dem Ordner einen weiteren angelegt und ein paar Dateien hineinkopiert. Mit dem Pfad zu dem Ordner im Code. Jetzt steht bei jeder Datei : "Not a Directory" dabei
 
Dann schau mal was folgendes ausgibt:

Code:
cd "/Users/Name/Desktop/Rec/Klienten/"; for i in *; do if [ -f "$i" ]; then echo mkdir -p "${i% *}"; echo mv "$i" "${i% *}/"; fi; done
 
Hy Pill

Sorry dass ich mich erst jetzt wieder melde. Der Code um 15:07 funktioniert jetzt. Ich habe alles in einen neuen Ordner gepackt und den alten gelöscht.
Eine Frage noch: Bei den Dateien steht am Anfang noch immer der Ordnername. Bekomme ich das weg?
z.B. aus Datei "hh 012" wird der Ordner "hh" (funzt genial dank Dir!!!) und die Datei heißt 012.
Danke nochmals!!!!!
 
Das sollte so funktionieren:

Code:
find "/Users/DeinName/Desktop/Rec/Klienten" -type f -name "[^.]*" | while read file; do mv "$file"  "${file%/*}/${file#* }"; done
 
Zurück
Oben Unten