• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Terminal Ordner mit *.xcodeproj Datei anzeigen

Termy

Boskop
Registriert
28.12.09
Beiträge
209
Hey,

Ich bin gerade dabei ein kleines Script zu verbessern, das ich mal geschrieben hatte. Und zwar möchte ich eine Auswahl von XCode Projekten angezeigt bekommen. Meine Projekte sind nach dem Schema gespeichert:
Code:
~/Documents/Projekte/$Projektname/$Projektname.xcodeproj
Ich möchte in dem Programm eine Auswahl angezeigt bekommen, etwas so:
Code:
Verfügbare Projekte:
1. Tetribble
2. BlurWindow
3. Würfel

Um das zu realisieren habe ich mich mal mit dem find Befehl auseinander gesetzt. So weit bin ich gekommen:
Code:
#!/bin/sh
cd Projekte
x=0
find . -type d -name '*' -exec x=$x+1; if [ -e "{}/*.xcodeproj" ] then echo "$x {}" fi \;
Aber irgendwie will überhaupt nichts funktionieren. Die Nummerierung funktioniert nicht, genausowenig wie das if (was außerhalb von find komischerweise funktioniert) auch werden alle Unterverzeichnisse durchsucht obwohl ich nur in der 1. Verzeichnisebene bleiben möchte.

Wäre echt nett, wenn mir da jemand helfen könnte
 
Code:
fldr="./././Projekte";
# Zielordner definieren

IFS=$'\n';
# Shellinterne Trennzeichen "Space" und "Tab"
# deaktivieren. Diese kommen häufig in Dateinamen
# vor und stören beim folgenden Kommando.

list=(  $(find -x "$fldr" -type f -depth 2 -iname '*.xcodeproj' 2>/dev/null)  );
# Nach den Projektdateien suchen.
# Im Zielordner und in allen direkten Unterordnern
# (Suchtiefe 2)
# Die als einzelne Zeilen präsentierten Ergebnisse werden
# in Einzelworte getrennt, da das gesamte Kommando nicht
# in Anführungszeichen gekapselt ist. Da jetzt aber nur noch das
# Trennzeichen "newline" aktiv ist, wird nur noch dort getrennt
# und jede volle Ergebniszeile wird zu einem einzelnen "Word".
# (Spaces werden als normale Zeichen erkannt und splitten den Text nicht mehr)
#
# Das Resultat (die einzelnen Zeilen) werden als
# Elemente der Array-Variablen "list[]" zugewiesen.
# Schema:  name=[COLOR="blue"]([/COLOR] "X1" "X2" "X3" "X4" "Xn" [COLOR="blue"])[/COLOR]

IFS=$' \t\n';
# Feldtrenner Standardeinstellung wiederherstellen.
# "Space-Tab-Newline" (Der Standard für "Whitespace")

for ((x=0;x<${#list[*]};x++));
do 
# [COLOR="blue"]for (([/COLOR]...[COLOR="blue"];[/COLOR]...[COLOR="blue"];[/COLOR]...[COLOR="blue"]))[/COLOR]
# Zählschleife starten. Details:
#
# for (([COLOR="blue"]x=0[/COLOR];...;...))
# Erster Durchlauf mit Startwert für x=0
#
# for ((...;[COLOR="blue"]x<${#list[*]}[/COLOR];...))
# Schleifeninhalt ausführen, solange x kleiner als
# die Anzahl der Elemente in der oben definierten
# Feldvariable "list[]" bleibt. Feldvariablen werden
# indiziert ab Element 0, "x" dient also gleichzeitig
# als Zeiger auf das richtige Element.
#
# for ((...;...;[COLOR="blue"]x++[/COLOR]))
# Nach jedem Scheifendurchlauf "x" um eins erhöhen

  list[x]="$( dirname "${list[x]}" )";
# Für Element "x" des Feldes "list[]" den abschliessenden
# Dateinamen entfernen.
  list[x]="$( basename "${list[x]}" )";
# Für Element "x" des Feldes "list[]" den Pfad
# bis zum letzten Slash entfernen.
# Ergebnis beider Aktionen: Der nackte Ordnername

done;
# Zählschleife schliessen

select item in "${list[@]}";
do
# Numeriertes Auswahlmenü zeigen (select...)
# Die Elemente des Menüs sind alle Elemente von list[]
# separiert durch Leerzeichen. Das eigentlich ausgeführte
# Kommando lautet also beispielsweise:
# [COLOR="blue"]select item in "Projekt 1" "Projekt 2" "Projekt 3"; do[/COLOR]
# Details zu "select" unter "man bash"

  echo $REPLY "$item";
  # "$REPLY" enthält die bei "select" eingegebene Antwort (die Zahl)
  # "$item" wurde der Inhalt des dazugehörigen Elements zugewiesen
 
done;
# "select" abschliessen
 
Zuletzt bearbeitet:
Okay...das sieht schon komplizierter aus! Vielen dank, aber meinst du, du könntest es noch ein wenig erläutern?