Ich habe mein Bestes über Google gesucht, aber für mein Leben kann ich *
nach einem kürzlich durchgeführten Update nicht herausfinden, was ich anstelle von (Sternchen) verwenden soll (sogar Wikipedia scheint zu denken
du -sh * and du -sh *
sollte arbeiten)
Ich habe benutzt
du -sh * | sort -h
seitdem kurz vor sort die -h
Option bekam (auf Fedora glaube ich, hat es eine Weile sort -h
gedauert, bis ich das auf CentOS verwenden konnte), aber plötzlich * scheint eine lange Liste von auszugeben
du: invalid option -- ' '
Dabei ' '
werden alle ungültigen Optionen durchlaufen, die nicht in der Manpage aufgeführt sind.
Ich wäre sehr dankbar, wenn mir jemand sagen könnte, was das Äquivalent wäre
du -sh * | sort -h
auf den aktualisierten Versionen.
shell-script
wildcards
disk-usage
options
jmkane
quelle
quelle
du -sh ./*
oderdu -sh -- *
Antworten:
Sie haben eine Datei mit einem lustigen Namen, wahrscheinlich beginnend mit a
-
. Denken Sie daran, dass Globs (wie*
) durch Ihre Shell erweitert werden und nicht durch den ausgeführten Befehl. Angenommen, Sie haben:Einfach genug Verzeichnis mit zwei Dateien. (Die
-1
Option zu coreutilsls
macht die Ausgabe einspaltig.)Wenn Sie ausführen
du -sh *
, stellt die Shell fest, dass das zweite Argument ein Sonderzeichen (*
) enthält und nicht in Anführungszeichen steht, sodass die Glob-Erweiterung ausgeführt wird. Es erweitert es auf alles, was passt, in diesem Fallfoo
und-q
. Der Effekt ist genau so, als würden Sie ausführen:Der obige Fehler ist klar: GNU-Dienstprogramme erlauben der Einfachheit halber Optionen, die mit Dateinamen gemischt werden.
du
nimmt den Dateinamen-q
als Option. Und es gibt keine-q
Option. (Dies ist tatsächlich das Beste, was Sie erwarten können. Schlimmer wäre es, wenn es eine-q
Option gäbe , und es hat etwas Unerwünschtes bewirkt.)Stépahanes Vorschlag ist, Ihren Globus in zu ändern
./*
, was dazu führen würdedu -sh ./foo ./-q
- was natürlich als Dateiname verwendet wird, da er nicht mehr mit beginnt-
. Die andere Option, die er vorschlägt, ist die Verwendung--
, die den GNU-Dienstprogrammen mitteilt, dass es keine weiteren Optionen gibt - nur Datei- / Verzeichnisnamen.Eigentlich solltest du immer entweder
… ./*
oder… -- *
anstelle von verwenden*
, aber wir sind alle faul ... Seien Sie vorsichtig, insbesondere wenn Sie nicht allen Dateinamen vertrauen.quelle
--
nicht nur GNU, sondern auch POSIX ist und daher von den meistendu
Implementierungen berücksichtigt werden sollte .du nimmt den Bindestrich in die Datei und nimmt ihn als Argument.
Wenn Sie '-' an den Befehl übergeben, bedeutet dies, dass keine weiteren Optionen gesendet werden. Führen Sie den Befehl daher folgendermaßen aus: du -fh - * oder du -sh - *
hat für mich gearbeitet ...
Dieser Thread hat geholfen: - http://www.webhostingtalk.com/showthread.php?t=1354139
quelle