`du -sh *`が間違ったオプションについて文句を言うのはなぜですか?

`du -sh *`が間違ったオプションについて文句を言うのはなぜですか?

*私は最高の結果を検索しましたが、私の人生で最近の更新以降(アスタリスク)を何に置き換えるべきかはわかりません(ウィキペディアも考えているようです)

du -sh * and du -sh *動作しなければならない)

使った

du -sh * | sort -h

以前はこのオプションがソートされていましたが-h(FedoraではCentOSで動作するのに時間がかかりましたsort -h)、突然*長いリストが出力されるようです。

du: invalid option -- ' '

' 'マニュアルページに記載されていないすべての無効なオプションを繰り返します。

誰でも私に何が等しいのか教えてくれたら

du -sh * | sort -h

更新されたバージョンについて。

ベストアンサー1

おそらくで始まる興味深い名前のファイルがあります-。 glob(例えば*)はシェルによって拡張されることを覚えておいてください。いいえ実行中のコマンドです。たとえば、次のような場合があるとします。

$ ls -1
foo
-q

2つのファイルを含む十分に単純なディレクトリです。 (-1coreutilsのオプションにより、ls出力は単一の列になります。)

を実行すると、du -sh *シェルは2番目の引数に特殊文字(*)が含まれ、引用符で囲まれていないことを認識してグローバルに拡張します。一致するすべての項目(この場合fooと)に展開されます-q。効果は、以下を実行したのとまったく同じです。

$ du -sh foo -q
du: invalid option -- 'q'
Try 'du --help' for more information.

du上記のエラーは明らかです。便宜上、GNUユーティリティはオプションをファイル名と混在させることができます-q。そして選択の余地はありません-q。 (それは本当にあなたが望むことができる最善です。-qオプションがあり、不要な作業をした場合は悪いでしょう。)

Stépahaneの提案はglobをに変更することです./*。結果du -sh ./foo ./-qはもう終了しないため、ファイル名として扱われます-。彼が提案したもう一つのオプションは、--GNUユーティリティにもはやオプションがないことを知らせることです。ファイル/ディレクトリ名。

本当にそうしなければなりません。いつもを使用する… ./*… -- *置き換えます*が、私たちはすべて怠惰です…特にすべてのファイル名を信頼していない場合は注意してください。

おすすめ記事