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
awk
orを使用していくつかのコマンドを試しましたが、目的の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
略語です。$_.put
put $_
if
出力例(4つのコード例すべて):
total 36
答え3
ls
ファイル名引数なしで呼び出すときなど、ディレクトリの内容を一覧表示するために、、、、オプションのいずれかと一緒に呼び出すと、デフォルトでリスト(現在の作業ディレクトリ)になり、出力にプレフィックスを追加します。-s
-l
-n
-o
-g
.
total <a-number>
この数字は、リストされたファイルが占有する割り当てられた512バイトのディスク・スペース単位の総数です。 GNU実装の場合は、環境で変数を使用して呼び出すか、オプションまたは環境変数を使用してブロックサイズを指定しない限り、find
1024バイト単位です。POSIXLY_CORRECT
--block-size
BLOCK_SIZE
LS_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