home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
newc_dev
/
ls132.lha
/
ls
/
ls.doc
< prev
next >
Wrap
Text File
|
1992-10-14
|
19KB
|
497 lines
Format : LS [string | pattern] [ALL] [SHORT] [DETAIL] [FILES] [DIRS]
[LINKS] [UNIX] [NOLINKS] [NOEXPAND] [NOSORT] [DATE]
[ALPHA] [SIZE] [REV] [DIRFIRST] [FILESFIRST] [NOFIRST]
[NOSTATUS] [STATUS] [LFORMAT "string"] [HIDDEN] [TO "datei"]
[QUICK] [LEVEL x] [FLAGS "hsparwedHSPARWED"] [EXECUTE]
[NOANSI] [LEN op xxx] [SINCE date] [UPTO date]
[COMMENTS] [ECHO]
Schablone : LS , ALL/S,SHORT/S,DETAIL/S,FILES/S,DIRS/S,LINKS/S,UNIX/S,
NOSORT/S,DATE/S,ALPHA/S,SIZE/S,REV/S,DIRFIRST/S,
FILESFIRST/S,NOFIRST/S,NOSTATUS/S,STATUS/S,LFORMAT/K,HIDDEN/S,
TO/K,QUICK/S,LEVEL/K,FLAGS/K,EXECUTE/S,LINKS/S,NOLINKS/S
NOANSI/S,LEN/K,SINCE/K,UPTO/K,COMMENTS/S,ECHO/S
Bedeutung : listet alle Einträge eines Verzeichnisses auf. Auf Wunsch
kann dies auch in untergeordneten Verzeichnissen (rekursiv)
geschehen. "LS" kann das Verzeichnis nach Alphabet, Größe der
Dateien oder nach Datum sortieren. Die Sortierrichtung kann
umgekehrt werden. Mit den Parametern "SHORT", "UNIX" und "DETAIL"
kann zwischen drei Darstellungweisen gewechselt werden, wie sie vom
UNIX-LS, DIR und LIST Befehl her bekannt sind. Die Parameter im
einzeln:
ALL - alle untergeordneten Verzeichnisse durchsuchen
SHORT - wähle als Darstellungsform die vom CLI-Befehl DIR
bekannte. Als einzige Information wird der Name
angezeigt
DETAIL - wähle als Darstellungsform die vom CLI-Befehl LIST
bekannte. Das Datum wird in Deutsch ausgegeben;
als Wörter können "vorgestern", "gestern", "heute"
und "zukünftig" auftauchen. Auch bei dieser
Darstellungsform kann der Parameter "ALL" verwendet
werden
UNIX - wähle als Ausgabeform die vom UNIX-Befehl 'ls' her
bekannte kompakte Ausgabeform in mehreren Spalten.
Bevor ls etwas ausgibt, errechnet es die optimale
Anzahl möglicher Spalten.
FILES - nur Dateien anzeigen
DIRS - nur Verzeichnisse anzeigen
LINKS - nur Links (Hard- wie Softlinks) anzeigen. Dies
funktioniert nur mit einem 2.0-FastFileSystem unter
2.0.
NOLINKS - Links nicht anzeigen. Praktisch, wenn man Listen für
Backup-Programme erstellt, oder mit Programmen
arbeitet, die Links partout nicht vertragen.
NOEXPAND - Links nicht expandieren. Normalerweise versucht ls
herauszufinden, worauf ein Softlink zeigt. Dies kann
auch mißlingen. Mit dieser Option läßt sich das
Expandieren abschalten.
NOSORT - gefundene Dateien und Verzeichnisse nicht sortieren
(nach Alphabet,Datum,Größe). Manchmal praktisch
Die folgenden drei Optionen sollten nicht kombiniert
werden. Wenn doch, sortiert ls, wie es ihm paßt oder auch
gar nicht ( hat aber garantiert KEINEN Absturz zur Folge).
DATE - nach Datum sortieren, altes Zeugs zuerst
ALPHA - nach Alphabet geordnet ausgeben, A zuerst
SIZE - nach Größe ausgeben, große Dateien zuerst
REV - Sortierrichtung umkehren (gilt für ALPHA, DATE & SIZE)
DIRSFIRST - Verzeichnisse zuerst ausgeben und gesondert sortieren
FILESFIRST - Dateien zuerst zeigen und gesondert sortieren
NOANSI - schaltet alle ANSI-Steuersequenzen aus. Dies ist sehr
nützlich, wenn man die Ausgabe in eine Datei umleitet.
(wenn es hierzu auch die Option TO gibt).
NOFIRST - gemischt ausgeben, weder Dateien noch Verzeichnisse
bevorzugen. Diese Option sollte nicht mit "NOTHING"
verwechselt werden. Sie schaltet NICHT die Sortierung
ab (dazu gibt es NOTHING).
NOSTATUS - keine abschließende Statusmeldung ausgeben
STATUS - STATUS ist das Gegenstück zu NOSTATUS. Es gibt nämlich
einige Parameter die implizit NOSTATUS setzen. Dazu
gehört LFROMAT und QUICK. Möchte man sich mittels
LFORMAT ein eigenes Ausgabeformat basteln, bei dem
nach der Ausgabe der Dateien noch die Statuszeile
erscheinen soll, so sollte man nach ! LFORMAT ein
STATUS angeben.
LFORMAT "text"
- funktioniert wie beim List-Befehl, jedenfalls fast
so. Statt der normalen Ausgabe (die mit SHORT oder
DETAIL gewählt werden kann), untersucht "LS" den
"text" nach der Zeichenfolge "%s". Findet er eine
solche, wird sie durch den Dateinamen ersetzt und
der ganze String ausgegeben. Taucht "%s" mehrmals auf,
wird auch der Dateiname mehrfach eingesetzt (im
Unterschied zu LIST!!). Statt des Dateinames kann
auch der komplette Pfad eingesetzt werden: Hierzu
ist der Parameter "ALL" anzugeben. Beispiel:
ls edi-#? LFORMAT "del %s"
liefert als Ausgabe möglicherweise
del edi-compile
del edi-druck.c
del edi-druck.c.info
del edi-druck.o
del edi-zustand
In dem String hinter der Option LFORMAT kann nicht nur
"%s" als Platzhalter verwendet werden. Es gilt:
"%o" - Name ohne Punkt-Erweiterung wie ".tex" einfügen
"%x" - nur die Punkt-Erweiterung eines Namens ohne den
Punkt einfügen
"%p" - Pfad ohne den Dateinamen einfügen
"%f - Dateinamen (engl. File) ohne Pfad einfügen
Um individuelle Ausgabeformate zu unterstützen, habe
ich ls weitere Platzhalter für die Option "LFORMAT"
eingebaut. Es ist möglich, alle Informationen einer
Datei in beliebiger Reihenfolge auszugeben. Alle neuen
Platzhalter beginnen mit einem '%i' ('i' für
Information). Dann ist ein weiterer Buchstabe
anzugeben; dabei gilt folgende Zuordnung:
"d" - Datum einfügen
"c" - Kommentar einfügen
"b" - Flags einfügen (sowas wie "----rwed c")
"l" - Länge der Datei einfügen
"L" - wie "l", die Länge wird jedoch rechtsbündig
in ein 7 Buchstaben breites Feld eingefügt.
"?" - ersetzt das Fragezeichen durch " DIR ",
"FILE ", "SLINK", "DLINK" oder "FLINK".
Mit DICE gibt es ein Problem mit der Option LFORMAT.
Es ist nicht möglich, ein Anführungszeichen in
Anführungszeichen anzugeben (dämlicher Startup-Code!).
So etwas wie
ls #?.info lf "protect ""%s"" +h"
geht nach wie vor nicht. Deshalb ersetzt ls nun
einfache Anführungszeichen innerhalb des LFORMAT-
Strings durch doppelte. Obiger String kann wie
folgt angegeben werden:
ls #?.info lf "protect '%s' +h"
Möchte man mehrere Kommandos auf einmal ausführen,
so kann man Kommandos durch die Zeichenfolge *n
trennen. Hierzu ein Beispiel: Sie möchten Dateien
verschieben, in dem Sie die betreffenden Dateien
erst kopieren und dann löschen:
ls #? lf "copy '%s' ziel:*ndelete '%s'" execute
HIDDEN - auch Dateien und Verzeichnisse anzeigen, bei welchen
das Hidden-Flag gesetzt ist und die auf ".info" enden.
Normalerweise zeigt ls keine ".info"-Dateien und solche
mit gesetztem "h"-Flag an.
COMMENTS - Kommentare in einer Extrazeile anzeigen, wenn die Datei
einen Kommentar hat. Dies funktioniert aber nur im
DETAIL-Modus. Sonst hat die Option keine Auswirkungen.
TO "datei" - funktioniert wie beim List-Befehl. Statt die
Ausgabe auf den Bildschirm zu bringen, kopiert "ls"
sie in die angegebene Datei. Dies ist manchmal
praktisch, wenn die Umleitung per ">" nicht gelingen
will (wie in make). Fehlermeldungen schreibt "ls"
trotzdem auf den Bildschirm.
QUICK - funktioniert wie LFORMAT "%s". ls listet alle
Verzeichnis-Einträge in der DETAIL-Form auf,
ohne jedoch weitere Angaben zu jeder Datei auf-
zuführen. Diese Option ist nützlich, wenn das Ergebnis
in eine Datei umgeleitet wird. Kompatibel zu LIST.
LEVEL num - 'num' gibt die Verzeichnistiefe an, bis zu der ls
verzweigen soll. Möchte man also alle Verzeichnisse
des aktuellen Verzeichnisses und deren Inhalte sehen,
so lautet der passende Aufruf
ls LEVEL 1
Dieser Parameter funktioniert also ähnlich wie ALL,
nur daß man festlegen kann, wie tief ls im Verzeichnis-
Baum absteigen soll.
LEVEL 0 erzwingt die Ausgabe von Dateinamen mit
kompletten Pfad.
FLAGS xxx - stellt einen mächtigen Auswahlmechnismus dar. Hinter
FLAGS kann man Flags angeben, die gesetzt oder
gelöscht sein sollen, wenn ls die dazugehörige Datei
anzeigen soll.
Ein Beispiel zeigt das vielleicht am einfachsten:
ls FLAGS ap
und ls zeigt alle Dateien, bei denen das 'a'- und das
'p'-Flag gesetzt ist. Alle anderen Flags bleiben
unberücksichtigt. Beispiel Nummer 2:
ls FLAGS WD
Dies führt zur Anzeige aller Dateien, bei denen die
Flags 'w' und 'd' NICHT gesetzt sind (die also nicht
gelöscht und nicht beschrieben werden können).
Groß- und Kleinschrift entscheiden darüber, ob das
angegebene Flag gesetzt oder gelöscht sein muß,
damit ls die dazugehörige Datei ausgibt. Kleinschrift
heißt "muß gesetzt sein", Großschrift "darf nicht
gesetzt sein". Nicht angegebene Flags sind dann egal.
Wenn Sie diese Option zusammen mit ALL benutzen,
können Sie sich schnell einen Überblick über spezielle
Dateien auf der gesamten Platte oder Diskette
verschaffen.
EXECUTE - Die Ausgabe von ls wird Zeile für Zeile als Kommando
ausgeführt. Dies ist vor allem sinnvoll, wenn man
mit LFORMAT einen String mit Platzhalter definiert
hat.
Ein Beispiel:
ls :#?.info ALL LFORMAT "protect %s +h" EXECUTE
und schon werden alle ".info"-Dateien der Diskette
oder Festplatte des aktuellen Verzeichnisses mit dem
h-Flag versehen.
Wird EXECUTE ohne den Parameter TO verwendet, schreibt
ls seine Ausgabe in die Datei "T:ls_tmpfile", führt
die Datei als Script-Datei aus und löscht sie
anschließend.
Wenn sie den Parameter TO angeben, verwendet ls den
angegebenen Namen und löscht die Datei hinterher NICHT.
ECHO Diese Option ist nur mit EXECUTE sinnvoll und wirksam.
Normalerweise führt ls mit EXECUTE die zusammengesetzen
Kommandos aus, ohne anzuzeigen, welche Kommandos es
ausführt. Mit ECHO wird jedes Kommando erst auf dem
Bildschirm angezeigt und dann ausgeführt.
Hierzu fügt ls vor jedem auszuführenden Kommando
eine Zeile "echo <kommando_zeile>" in "T:ls_tmpfile"
ein.
LEN op num Mit LEN kann man anzuzeigende Dateien anhand ihrer
Länge auswählen. Dazu ist hinter LEN ein
Vergleichsoperator und eine Größe in Bytes anzugeben.
Mögliche Vergleichsoperatoren sind:
!= ungleich
== gleich
<= kleiner gleich
>= größer gleich
< kleiner
> größer
ls wird dann nur die Dateien anzeigen, auf die die
angegebene Bedingung zutrifft. Ein Beispiel:
ls LEN > 100000 all
und man bekommt alle Dateien aufgelistet, die mehr als
100 000 Bytes belegen und in diesem und allen
folgenden Verzeichnissen zu finden sind.
SINCE date Prinzipiell haben SINCE und UPTO die gleiche Funktion
UPTO date wie beim original list-Befehl von Commodore. Sie
arbeiten aber im Unterschied zu diesem nicht mit
absoluten Zeitpunkten, sondern mit Angaben relativ zur
jetzigen Zeit. Ein Wert bezieht sich also immer auf
das "jetzt" minus eines bestimmten Zeitraumes.
Die Zeiträume können in Tagen, Stunden und Minuten
angegeben werden. Außerdem gibt es noch die
Schlüsselwörter TODAY und YESTERDAY, die sich auf 0:00
am heutigen und 0:00 am gestrigen Tag beziehen.
SINCE steht für "ab einem Zeitpunkt (einschließlich)
bis jetzt".
Beispiele:
Angenommen, es sein nun 16:23 am 8.9.1990:
SINCE 5 HOURS
steht für "liste alle Dateien auf, deren Datum
zwischen 11:23 (einschließlich) und 16:23 liegt".
SINCE 5 HOURS 23 MINUTES
steht für "liste alle Dateien auf, deren Datum
zwischen 11:00 (einschließlich) und 16:23 liegt".
SINCE 6 DAYS
steht für "liste alle Dateien auf, deren Datum
zwischen dem 2.9.90 16:23 (einschließlich) und dem
8.9.90 16:23 liegt".
UPTO steht für "bis zu einem Zeitpunkt (ausschließlich)".
Mit dem Datum von oben bezeichnet die Angabe
UPTO 5 HOURS 23 MINUTES
den Zeitraum vom 1.1.1978 0:00 bis 8.9.90 11:00
(ausschließlich).
Eine besondere Funktion haben die Wörter YESTERDAY und
TODAY. Sie sind kein Synonym für "24 HOURS" oder "1
DAY". Sie stehen jeweils für 0:00 am gestrigen
beziehungsweise heutigen Tag.
Beispiel (Datum wie oben):
SINCE TODAY
steht für den Zeitraum vom 8.9.90 0:00 (einschließlich)
bis 8.9.90 16:23.
UPTO YESTERDAY
steht für den Zeitraum vom 1.1.1978 0:00 bis 7.9.90 0:00
(ausschließlich).
DEFAULT-mäßig sind folgende Optionen gesetzt:
DETAIL
ALPHA
DIRSFIRST
Das entspricht der sortierten Ausgabe eines List-Befehls.
Beispiel: LS ram:d#?.? SHORT Alpha reV
listet alle Dateien der RAM-Disk, die mit "d" beginnen,
und auf .o, .c oder sonst einer einbuchstabigen Extension
enden. Die Liste wird nach dem Alphabet umgekehrt sortiert
und könnte so aussehen:
dzzzz.aha.soso.c dzzzz.aha.lala.i
dir.o dir.c
dadeldideldudeld.ö
Bemerkungen:
LINKS
In der SHORT-Form erscheinen Links in weißer Farbe (Farbe 2).
Sie werden richtig nach Verzeichnissen und Dateien verschieden
eingeordnet. Links auf Verzeichnisse erscheinen also bei den
Verzeichnissen, Links auf Dateien bei den Dateien. Die per
DIRSFIRST oder FILESFIRST gegebene Ordnung bleibt erhalten.
In der DETAIL-Form steht bei den Links keine Längenangabe, sondern
das Kürzel "DLINK" oder "FLINK" für "Directory-Link" oder "File-
Link". Möchte man die Länge einer gelinkten Datei erhalten, muß man
sie direkt angeben, wie zum Beispiel in
ls gelinkteDatei
ls löst auch Softlinks auf, sobald es welche findet. Der Name wird
erweitert und wie folgt ausgegeben:
linkname -> Originalname
Dies gilt sowohl für Hard- als auch für Softlinks. Ist dies nicht
erwünscht, ist die Option "NOEXPAND" anzugeben. Sie verhindert die
Link-Expandierung. Leider läßt sich die Expandierung nicht
verhindern, wenn man nur eine Datei als Parameter angibt (und kein
Muster oder Verzeichnis), da der Aufruf von "Examine()" Softlinks
automatisch expandiert - ganz im Gegensatz zu "ExNext()" (da hat
Commodore mal wieder Mist gebaut).
Softlinks erhalten in der DETAIL-Form die Bezeichnung "SLINK".
In der SHORT-Form wird die Expandierung automatisch abgeschaltet.
Allgemeines
Alle Optionen können in Groß- oder Kleinschrift angegeben werden,
auch wild gemischt. Man kann die Optionen auch abgekürzt angeben.
Für LFORMAT genügt beispielsweise LF, für EXECUTE reicht EX.
Beim ersten Parameter wird versucht, diesen als Datei
oder Verzeichnis oder Teil davon zu entlarfen. Gelingt
dies, kann er nicht als Option dienen.
Also: wenn es eine Datei "DATE" gibt, dann erscheint nach
LS date
lediglich eine Zeile wie
date 6 ----rewd Heute 00:09:57
ls ist residentfähig. Man kann es jederzeit residentfähig machen.
Sollte ls unter 2.0 laufen, benutzt er den dort eingebauten
Patternmatching-Mechnismus. Sonst kennt er nur die Platzhalter '?',
'#?' und den '*' (für alles).
Übrigens: Wenn LS auch nach Ausführung allen (ge|ver)brauchten
Speicher wieder zurückgibt, sollte man sich darüber im Klaren sein,
daß er zwischendurch ganz schön zulangen kann. Das können auch mal
100 KByte sein. Die Rückgabe dieses Speichers kann nach dem Listen
einer ganzen Partition etwas (ein paar Sekunden) dauern.
Abkürzungen
Wie bei meinem CD-Ersatz "nd" kann bei Ls auch ein
unvollständiger Verzeichnisname angegeben werden. "ls" sucht
dann anschließend das aktuelle Verzeichnis oder das im Pfad
angegebene auf einen Namen hin durch, der genauso beginnt.
Zwei Beispiele:
ls sys:fo
und "ls" listet den Inhalt des Verzeichnisses 'sys:fonts' auf.
Dies funktioniert auch bei relativen Pfaden. Befindet man sich
im Verzeichnis sys:c und möchte man sys:system ansehen,
reicht ein
ls /sy
Doch Vorsicht: Gibt es in dem Verzeichnis, in welchem "ls"
sucht, mehrere Verzeichnisse, auf die das angegebene Kürzel
paßt, nimmt es das zuerst gefundene.
ls wertet vor den Parametern der Kommandozeile die Environment-
Variable "LS_OPTIONS" aus. In dieser Variablen kann jeder
Kommandozeilen-Parameter stehen. Soll ls zum Beispiel immer wie DIR
funktionieren, geben sie folgendes ein
setenv LS_OPTIONS "SHORT"
Wichtig für 2.0-Nutzer: ls sucht erst nach einer lokalen Variable
"LS_OPTIONS" und dann nach der globalen Variable "LS_OPTIONS". Sie
können also "set" und "setenv" benutzen.
Known Bugs Bis zur Version 1.25 (einschließlich) war "ls" nicht residentfähig.
Ab Version 1.26 ist dies Problem "gegessen". Man sollte halt nicht
vergessen auch beim Linken "-r" anzugeben, nicht nur beim
Kompilieren.
Version 1.28: Ab Version 1.28 kann "ls" auch Hardlinks expandieren. Außerdem
macht "ls" nun keine Fehler mehr beim Ausgeben von "%ic"
(Kommentaren), wenn es keine gibt. Desweiteren sollten in der
UNIX-Ausgabeform in der letzten Zeile keine komischen Zeichen
mehr zu sehen sein, die manchmal dort auftauchten, wo kein
Dateiname mehr stehen sollte.
Version 1.29: Folgende Fehler behoben: pr_WindowPtr wird korrekt nach dem
Beenden von "ls" restauriert. Nicht dereferenzierbare Softlinks
werden nun in Klammern und nicht mehr als "(...)" ausgegeben.
Kommentare werden nun auch bei der Ausgabe einer einzelnen Datei
ausgegeben (falls gewünscht).
STATUS neu eingeführt (siehe oben).
Version 1.30: ECHO neu eingeführt (siehe oben).
Die Zeichenfolge *n wird nun in LFORMAT-Schablonen zu einem
Zeileumbruch expandiert.
Version 1.31: CTRL-C funktioniert nun auch in der 2.0-Only-Version. Da das
Printf der DOS-Library natürlich bei CTRL-C nicht die exit()-
Funktion meines Programms aufruft, muß man dies schon selbst
tun! In der 1.3-Version des Programms benutze ich noch
die printf()-Funktion der C-Compiler-Library.
Version 1.32: "Abbruch" wird nicht mehr nach "ls ?" ausgegeben.
Siehe auch: DIR LIST