[ Gelöst ] Wo ist die Dateinamenexpansion ???

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Wo ist die Dateinamenexpansion ???

Beitrag von newdeb » 30.01.2015 22:05:10

Inkodiktus hat geschrieben:@newdeb: Der eine Link mit Anker, der geht wohl nicht
Danke für den Hinweis. Ist korrigiert.

Benutzeravatar
4A4B
Beiträge: 926
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Wo ist die Dateinamenexpansion ???

Beitrag von 4A4B » 31.01.2015 08:23:32

Inkodiktus hat geschrieben:
4A4B hat geschrieben:
Inkodiktus hat geschrieben:Okay, ich kann mit touch t[es]t genau die Datei t[es]t erstellen, aber wozu dann dieses Feature, welches ich dann nicht so einsetzen kann???
Auch das hat meillo bereits erklärt:
meillo hat geschrieben:Die Shell versucht passende Dateien zu finden (`tet' und `tst')
Wenn sich in dem Verzeichnis, in welchem du den Befehl "touch t[es]t" ausführst, eine Datei mit dem Namen tet befindet, würde diese einen neuen Timestamp erhalten
Ja, touch ist nur ein Beispiel, genauso gut bzw. schlecht geht es mit mkdir nicht!
Oder macht er nur dann ein Verzeichnis, wenn es schon eins gab? *augenrollenmitverwirrtsein* 8O
Ich versteh die Logik hinter [...] nicht.
Mit mkdir macht das keinen Sinn, aber mit rmdir z.B. ;) Es geht darum, einen Teil der vorhandenen Dateien / Verzeichnisse als Argumente von touch, rmdir etc. anzugeben, ohne diese alle einzeln eintippen zu müssen. Wenn du z.B. nur die Verzeichnisse bla-1 bis bla-7 löschen möchtest, aber nicht bla-8 und bla-9:

Code: Alles auswählen

rmdir bla-[1-7]
Brace Expansion ginge hier zwar auch, aber z.B. nicht bei touch, weil touch dann nämlich was anderes macht (auch leere Dateien anlegen, statt nur Timestamps setzen). Und Brace Expansion ist nicht so portabel.


Edit:

und falls es in dem obigen Beispiel das Verzeichnis bla-5 nicht gibt, dann gibt rmdir + Brace Expansion eine Fehlermeldung aus, rmdir + [..] hingegen nicht, weil bei letzterem nur die gefundenen Dateinamen als Argument übergeben werden

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: [ Gelöst ] Wo ist die Dateinamenexpansion ???

Beitrag von Inkodiktus » 31.01.2015 13:55:45

@4A4B: Danke für die weitreichenden Infos!
Brace Expansion ginge hier zwar auch, aber z.B. nicht bei touch, weil touch dann nämlich was anderes macht (auch leere Dateien anlegen, statt nur Timestamps setzen). Und Brace Expansion ist nicht so portabel.
Was heißt "Brace Expansion ist nicht so portabel" ??

Mein Fehler war, das [...] als eine gängige Expansion zu sehen, mit der ich alles expandieren kann.
Wildcards und Brace Expansion sind ja zwei verschiedene Sachen.
Wobei ich es für Schwachsinn erhalte, dass man das [...] und das {...} nehmen kann und dann noch mit anderen Zeichen!
Das sind dann "fast" 2 Möglichkeiten eine Sache zu machen, was ja bei manchen Befehlen zu Fehlermeldung führt!
Bei der ganzen Sache wird man nur bekloppt. :mrgreen:
Ja, warum einfach machen, wenn es kompliziert ist. Jetzt ist mir klar, warum Linux so lange auf seine Erweckung warten musste.
So etwas kriegen nur Hacker zu Stande. :D
Nach dem Motto:
"Where is the next mountain?" :facepalm: :mrgreen:
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

Liffi
Beiträge: 2306
Registriert: 02.10.2004 01:33:05

Re: [ Gelöst ] Wo ist die Dateinamenexpansion ???

Beitrag von Liffi » 31.01.2015 14:10:23

Inkodiktus hat geschrieben: Ja, warum einfach machen, wenn es kompliziert ist. Jetzt ist mir klar, warum Linux so lange auf seine Erweckung warten musste.
Andere Betriebssysteme versteck(t)en Herunterfahren unter Start. Da finde ich das mit der unterschiedlichen Syntax für unterschiedliche Dinge in der Shell noch einigermaßen erträglich.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: [ Gelöst ] Wo ist die Dateinamenexpansion ???

Beitrag von newdeb » 31.01.2015 14:31:29

[...] und {..} sind für völlig verschiedene Aufgaben gedacht:
[ ] : Definition einer Zeichenmenge/Zeichenbereiches innerhalb eines Vergleichsmusters (Glob oder Regex)
{..} : einfaches Generieren von Sequenzen
Und beide können wunderbar zusammenarbeiten, z.B.

Code: Alles auswählen

mkdir dir-{01..10} && chmod 777 dir-0[1-3]
Man muss sich halt vorher genau überlegen, was man braucht und wie portabel es sein soll. (Z.B. kennt die "dash" keine Brace Expansion).

Benutzeravatar
Meillo
Moderator
Beiträge: 8818
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [ Gelöst ] Wo ist die Dateinamenexpansion ???

Beitrag von Meillo » 31.01.2015 14:38:18

Inkodiktus hat geschrieben: Was heißt "Brace Expansion ist nicht so portabel" ??
Das bedeutet, dass sie nicht Teil von POSIX ist und nicht von allen Bourne-kompatiblen Shells unterstuetzt wird.

Wildcards und Brace Expansion sind ja zwei verschiedene Sachen.
[...]
Das sind dann "fast" 2 Möglichkeiten eine Sache zu machen, [...]
Da widersprichst du dir selbst. ;-) Du hast aber richtig erkannt: Es sind zwei ganz verschiedene Sachen.

1) Wildcards/Globbing ist eine Pattern-Matching-Funktion, man sucht damit die Menge aller Dateinamen, auf die das Pattern zutrifft.

2) Brace-Expansion dagegen generiert Strings.

... es ist lediglich so, dass man manchmal mit beiden Funktionen zum gleichen Ziel kommt.

was ja bei manchen Befehlen zu Fehlermeldung führt!
Nicht bei den Befehlen, sondern in der Shell. -- Das ist ein entscheidender Verstaendnisschritt.

Bei der ganzen Sache wird man nur bekloppt. :mrgreen:
Ja, warum einfach machen, wenn es kompliziert ist. Jetzt ist mir klar, warum Linux so lange auf seine Erweckung warten musste.
So etwas kriegen nur Hacker zu Stande. :D
... oder Personen, die sich in Ruhe einlesen und die Realitaet verstehen wollen um in ihr zurecht zu kommen. Probleme haben diejenigen, die denken die Realitaet waere so, wie sie glauben, dass sie sein sollte, und dann daran scheitern, dass sie anders ist.

Hier eine empfehlenswerte Lektuere fuer dich: http://www.felix-schwarz.name/files/ope ... t_Windows/
Use ed once in a while!

artemis
Beiträge: 447
Registriert: 21.12.2005 23:11:11

Re: [ Gelöst ] Wo ist die Dateinamenexpansion ???

Beitrag von artemis » 31.01.2015 15:04:48

Meillo hat geschrieben:Nicht bei den Befehlen, sondern in der Shell. -- Das ist ein entscheidender Verstaendnisschritt.
Und ich glaube, dass wurde vom TE nicht bedacht. [] und {} werden von der Shell ausgewertet, und nicht vom jeweiligen Befehl...

Bis dann,
artemis

Antworten