Discussion:
ls --ignore-backups buggy?
Martin Klaiber
2018-11-22 18:21:41 UTC
Permalink
Hallo Liste,

auf einer anderen Mailingliste stolperte ich gerade über das Phänomen,
dass "ls -B" nicht funktioniert, wenn man einen Dateinamen angibt.

Zur Erinnerung, aus der manpage:

-B, --ignore-backups
do not list implied entries ending with ~

Beispiel:

***@maurice:~/tmp$ ls
abc abc~ abc~~
***@maurice:~/tmp$ ls -B
abc
***@maurice:~/tmp$ ls -B *
abc abc~ abc~~
***@maurice:~/tmp$ ls --ignore-backups
abc
***@maurice:~/tmp$ ls --ignore-backups *
abc abc~ abc~~

Soll das so sein oder ist das ein bug?

Ich benutze Debian stable. Kann jemand mit unstable bitte mal testen,
ob da das Verhalten gleich ist? Danke!

In tar gab es offenbar mal ein ähnliches Verhalten, das als bug
eingestuft und korrigiert wurde:

<https://unix.stackexchange.com/questions/49715/tar-exclude-backups-does-not-exclude-files-with-tilde-at-end>

Für ls konnte ich dazu bisher nichts finden. Weiß jemand Genaueres?

TIA, Martin
Ulf Volmer
2018-11-22 18:41:54 UTC
Permalink
Post by Martin Klaiber
-B, --ignore-backups
do not list implied entries ending with ~
abc abc~ abc~~
abc
abc abc~ abc~~
abc
abc abc~ abc~~
Halt ich für völlig normales Verhalten. Die Shell expandiert Dein *,
Du führst also im Endeffekt

ls -B abc abc~ abc~~

aus. Das ls in dem Fall auch die Backups anzeigt, um die es ja explizit
gebeten wurde, ist meiner Meinung nach ok.

Viele Grüße
Ulf
Christian Knoke
2018-11-22 19:03:46 UTC
Permalink
Post by Ulf Volmer
Post by Martin Klaiber
-B, --ignore-backups
do not list implied entries ending with ~
Halt ich für völlig normales Verhalten. Die Shell expandiert Dein *,
Du führst also im Endeffekt
ls -B abc abc~ abc~~
aus. Das ls in dem Fall auch die Backups anzeigt, um die es ja explizit
gebeten wurde, ist meiner Meinung nach ok.
Hilfreich ist die englische Sprache. implied = impliziert <> explizit

Impliziert wäre also eine Datei, die Inhalt eines (explizit) angeforderten
Verzeichnisses ist.

Gruß
Christian
--
*** Christian Knoke * 25541 Brunsbüttel * http://cknoke.de ***
... ...
The prejudices people feel about each other disappear when they
get to know each other. -- Kirk, "Elaan of Troyius", stardate 4372.5
Martin Klaiber
2018-11-22 19:13:35 UTC
Permalink
Post by Ulf Volmer
Halt ich für völlig normales Verhalten. Die Shell expandiert Dein *,
Du führst also im Endeffekt
ls -B abc abc~ abc~~
aus.
Ja, aber das -B fordert ja, Dateien, deren Name auf eine Tilde endet,
nicht anzuzeigen.
Post by Ulf Volmer
Das ls in dem Fall auch die Backups anzeigt, um die es ja explizit
gebeten wurde, ist meiner Meinung nach ok.
Wie erklärst Du dann, dass "ls" alle drei Dateien und "ls -B" nur abc
anzeigt? "ls" ohne Dateiname ist ja im Prinzip das gleiche wie "ls *",
oder nicht? Für mich ist das nicht konsistent.

Danke und schöne Grüße
Martin
Ulf Volmer
2018-11-22 19:23:37 UTC
Permalink
Post by Martin Klaiber
Wie erklärst Du dann, dass "ls" alle drei Dateien und "ls -B" nur abc
anzeigt? "ls" ohne Dateiname ist ja im Prinzip das gleiche wie "ls *",
oder nicht? Für mich ist das nicht konsistent.
Nein. ls ohne Agrument listet den Inhalt des aktuellen Verzeichnisses.

Der Wildcard hingegen wird von der Shell zu einer Liste expandiert,
die dann ls übergeben wird.

Viele Grüße
Ulf
Martin Klaiber
2018-11-22 21:06:32 UTC
Permalink
Post by Ulf Volmer
Post by Martin Klaiber
Wie erklärst Du dann, dass "ls" alle drei Dateien und "ls -B" nur abc
anzeigt? "ls" ohne Dateiname ist ja im Prinzip das gleiche wie "ls *",
oder nicht? Für mich ist das nicht konsistent.
Nein. ls ohne Agrument listet den Inhalt des aktuellen Verzeichnisses.
Der Wildcard hingegen wird von der Shell zu einer Liste expandiert,
die dann ls übergeben wird.
Ja, Du hast recht. Das sind verschiedene Mechanismen, auch wenn das
Ergebnis gleich ist. Da stolpere ich (leider) öfter drüber.

Woran erkennst Du, dass sich die Option -B nur auf das Listing des
Verzeichnisses bezieht? An der Formulierung "list implied entries"
in der Beschreibung?

TIA, Martin
Ulf Volmer
2018-11-22 21:26:59 UTC
Permalink
Post by Martin Klaiber
Post by Ulf Volmer
Nein. ls ohne Agrument listet den Inhalt des aktuellen Verzeichnisses.
Der Wildcard hingegen wird von der Shell zu einer Liste expandiert,
die dann ls übergeben wird.
Ja, Du hast recht. Das sind verschiedene Mechanismen, auch wenn das
Ergebnis gleich ist. Da stolpere ich (leider) öfter drüber.
Woran erkennst Du, dass sich die Option -B nur auf das Listing des
Verzeichnisses bezieht? An der Formulierung "list implied entries"
in der Beschreibung?
Wurde ich so aus der Formulierung herauslesen.

Aber auch ganz praktisch, stellt Dir vor, Du hättest einen Alias

alias ls='ls -B'

Würdest Du dann erwarten, dass ein 'ls abc~' nichts ausgibt?

Viele Grüße
Ulf
Martin Klaiber
2018-11-22 22:21:24 UTC
Permalink
Post by Ulf Volmer
Post by Martin Klaiber
Woran erkennst Du, dass sich die Option -B nur auf das Listing des
Verzeichnisses bezieht? An der Formulierung "list implied entries"
in der Beschreibung?
Wurde ich so aus der Formulierung herauslesen.
Aber auch ganz praktisch, stellt Dir vor, Du hättest einen Alias
alias ls='ls -B'
Würdest Du dann erwarten, dass ein 'ls abc~' nichts ausgibt?
Hätte ich erwartet, ja. Bei einem "alias ls='ls -l'" wirkt die Option
ja auch gleichermaßen auf die Anzeige des Verzeichnislistings und auf
die der übergebenen Datei(en):

***@maurice:~/tmp$ alias ls
alias ls='ls -l'
***@maurice:~/tmp$ ls
total 12
-rw-r--r-- 1 martinkl martinkl 14 Nov 20 21:05 abc
-rw-r--r-- 1 martinkl martinkl 14 Nov 20 21:06 abc~
-rw-r--r-- 1 martinkl martinkl 7 Nov 20 21:04 abc~~
***@maurice:~/tmp$ ls abc~
-rw-r--r-- 1 martinkl martinkl 14 Nov 20 21:06 abc~

Warum sollte im letzten Fall ein "ls abc~" nur "abc~" ausgeben, wo
doch explizit das long-listing-format angefordert wurde? So hatte
ich -B bisher auch interpretiert: als explizite Anforderung, in der
Anzeige alle Dateien auszuschließen, die auf "~" enden.

Klar, der Unterschied ist der, dass in der Beschreibung der Option -l
keine Einschränkung auf "implied entries" vorgenommen wird. Ich hatte
auf diese Unterscheidung bei den Optionen bisher nur nie geachtet.

Ich verstehe allerdings die Intention auch nicht. Warum soll -B nicht
auch auf die als Argument übergebenen Dateien wirken? Was wäre daran
schlecht?

TIA, Martin
Ulf Volmer
2018-11-22 22:27:15 UTC
Permalink
Post by Martin Klaiber
Post by Ulf Volmer
alias ls='ls -B'
Würdest Du dann erwarten, dass ein 'ls abc~' nichts ausgibt?
Hätte ich erwartet, ja. Bei einem "alias ls='ls -l'" wirkt die Option
ja auch gleichermaßen auf die Anzeige des Verzeichnislistings und auf
Meione Sicht ist: Wenn Du ausdrücklich sagst, gibt mir bitte
Informationen über die Datei abc~, dann übersteuert das die Option -B.

Viele Grüße
Ulf
Martin Klaiber
2018-11-22 22:53:13 UTC
Permalink
Post by Ulf Volmer
Meione Sicht ist: Wenn Du ausdrücklich sagst, gibt mir bitte
Informationen über die Datei abc~, dann übersteuert das die Option -B.
Ja, ok, kann man so sehen. Aber wenn man will, dass abc~ angezeigt
wird, dann braucht man die Option -B doch gar nicht erst anzugeben.

Oder anders gesagt, wenn man das will:

***@maurice:~/tmp$ ls *
abc abc~ abc~~

Warum sollte man dann -B überhaupt angeben? Da würde ich das:

***@maurice:~/tmp$ ls -B *
abc abc~ abc~~

jedenfalls nicht erwarten. Die Option -B gibt man doch nur an, weil
man Backup-Dateien eben gerade aus der Anzeige ausschließen möchte.
So sehe ich es zumindest.

Aber es ist interessant, wie unterschiedlich man darüber denken kann.

Für mich war's das für heute, morgen ist auch noch ein Tag :-)

Danke für die interessante Diskussion und gute Nacht
Martin
Jochen Spieker
2018-11-23 00:02:18 UTC
Permalink
Post by Martin Klaiber
abc abc~ abc~~
"ls *" will man (also: ich) überhaupt nie. Die Shell expandiert den
Stern wie schon erwähnt zu allen nicht mit einem Punkt anfangenden
Verzeichniseinträgen und ls zeigt dann alle diese Einträge an. Bei
Verzeichnissen bedeutet das, das deren Inhalt angezeigt wird.

Wenn ich den Inhalt des aktuellen Verzeichnisses ausgeben will, dann
mache ich "ls". Den Inhalt des aktuellen Verzeichnisses und der direkten
Unterverzeichnisse will zumindest ich praktisch nie sehen.
Ich habe bis eben von dieser Option gar nichts gewusst. :)
Post by Martin Klaiber
abc abc~ abc~~
jedenfalls nicht erwarten. Die Option -B gibt man doch nur an, weil
man Backup-Dateien eben gerade aus der Anzeige ausschließen möchte.
So sehe ich es zumindest.
Aber es ist interessant, wie unterschiedlich man darüber denken kann.
Wie Du als Nutzer darüber denkst, ist ja eine Sache. Aber die Doku
schreibt ja explizit, dass -B nur *implizit* enthaltene Backup-Dateien
auslässt. Der einzige solche Fall, der mir einfällt, ist das Listing von
Verzeichnissen (ls wird ein Verzeichnis oder gar kein Argument
übergeben).

Kann man überraschend finden und sich anders wünschen, ganz klar. Aber
die Doku halte ich für eindeutig und die Entscheidung, es so zu machen,
auch für nachvollziehbar.

J.
--
The houses of parliament make me think of school bullies.
[Agree] [Disagree]
<http://archive.slowlydownward.com/NODATA/data_enter2.html>
Loading...