この場合、「total36」のみを表示するにはどうすればよいですか?

この場合、「total36」のみを表示するにはどうすればよいですか?

total 36宿題のためにここで生成された出力をLinuxで取得しようとしていますls -s

vboxuser@Ubuntu:~$ ls -s
insgesamt 36
4 Bilder  4 Dokumente  4 Downloads  4 Musik  4 Öffentlich  4 Schreibtisch  4 snap  4 Videos  4 Vorlagen

awkorを使用していくつかのコマンドを試しましたが、目的のdu結果が得られず、得られる最も近い結果は次のとおりです。

ls -s --block-size=1024

私に役立つコマンドがありますか?

答え1

これにより、目的のタスクが実行されます。

ls -s | grep ^total

ファイルリストの各ファイル名の前にサイズが表示されているため、「total」というファイルが存在しても把握できません。

この機能を使用するには、シェル言語(ロケール)をドイツ語から英語に変更する必要があります。

答え2

使用真珠:

~$ ls -s | perl -ne '$. == 1 && print $_;'

または:

~$ ls -s | perl -ne 'print $_ if $. == 1;'

使用幸せ(以前のPerl_6):

~$ ls -s | raku -ne '++$ == 1 && .put;'

または:

~$ ls -s | raku -ne '.put if ++$ == 1;'

合計が最初の出力ラインに印刷されるため、ln -s上記の回答は基本的に問題を解決します。「<STDIN>の最初の行をどのように印刷しますか?」

両方の言語(PerlとRaku)は、-ne「非自動印刷1行印刷」コマンドラインフラグを実装し、それに応じて行番号変数が出力を制御できるようにします。

Perlを使用して$.行番号変数が1かどうかをテストすると、&&段落演算子がトピック変数にprintなります。$_または(2番目の例)if条件を使用してください。

Rakuを使用すると、匿名$スカラーが事前に増加され(++$1)と等しいとテストされ、次の&&段落演算子がトピック変数にputなります。$_このコードは、条件を使用する.or(2番目の例)の.put略語です。$_.putput $_if

出力例(4つのコード例すべて):

total 36

https://perldoc.perl.org
https://docs.raku.org

答え3

lsファイル名引数なしで呼び出すときなど、ディレクトリの内容を一覧表示するために、、、、オプションのいずれかと一緒に呼び出すと、デフォルトでリスト(現在の作業ディレクトリ)になり、出力にプレフィックスを追加します。-s-l-n-o-g.

total <a-number>

この数字は、リストされたファイルが占有する割り当てられた512バイトのディスク・スペース単位の総数です。 GNU実装の場合は、環境で変数を使用して呼び出すか、オプションまたは環境変数を使用してブロックサイズを指定しない限り、find1024バイト単位です。POSIXLY_CORRECT--block-sizeBLOCK_SIZELS_BLOCK_SIZE

ビジーボックスやトイボックス(Android)を使用すると、その環境lsでも1024バイト単位を得ることができますがPOSIXLY_CORRECT、このような非コンプライアンスを解決する方法はないようです。

他のほとんどの実装では、512バイト単位の数を報告する必要があります。

lsローカライズされた実装を使用すると、totalユーザーの言語に翻訳される可能性があります。これはあなたの場合のようです。totalロケールに関係なく、ユーザーエクスペリエンスLC_ALL=Cから呼び出すことができるように、C(別名POSIXロケール)はtotal標準で指定される方法なので、保証される唯一のロケールです。

だから:

POSIXLY_CORRECT=1 LC_ALL=C ls -s | head -n 1

busybox / toyboxを除く合計512バイト単位の数を取得します。

ls具体的には、GNUの場合は1024バイト単位の数の場合:

LC_ALL=C ls --block-size=1024 -s | head -n 1

関連情報