MacOSでファイルサイズを取得する方法は次のとおりです。
$ du -h "Anthem - Rush (Cover by Jewel Box).webm"
69M Anthem - Rush (Cover by Jewel Box).webm
私が望むもの69M出力から。Anthem - Rush(ジュエリーボックスカバー).webm省略しています。どうすればいいですか?
答え1
du
(明らかな)サイズではないファイルのd
isk sageを報告します。u
ファイルサイズは、//ls
オプション-l
(およびその他の情報)または異なる、互換性のない構文を使用するさまざまなユーティリティの実装、または-o
対応する。-g
-n
stat
find
-printf '%s\n'
GNU 実装はディスク使用量の代わりにサイズを返すことdu
もできますが、--apparent-size
ディレクトリには使用できません。このタイプのファイルの場合、du
そのファイル内で参照されるすべてのファイルのディスク使用量/サイズが常に追加されるためです。
したがって、GNUシステムでシンボリックリンクを確認した後にKMGTPEサフィックスを持つファイルサイズを取得するには、次の手順を実行します。
stat -Lc%s -- "$file" | numfmt --to=iec
答え2
最初のフィールドだけを維持してください。さまざまな方法でこれを実行できます。
切る
du -h "Anthem - Rush (Cover by Jewel Box).webm" | cut -f1
アッ
du -h "Anthem - Rush (Cover by Jewel Box).webm" | awk '{print $1}'
sed
du -h "Anthem - Rush (Cover by Jewel Box).webm" | sed 's/[[:blank:]].*//'
真珠
du -h "Anthem - Rush (Cover by Jewel Box).webm" | perl -pe 's/\s.*//' du -h "Anthem - Rush (Cover by Jewel Box).webm" | perl -lane 'print $F[0]'
答え3
サンプルawk
コマンドを使用して目的の操作を実行できます。
du -h <filename>|awk '{print $1}'
答え4
du出力の有用な部分を抽出するterdonのさまざまな方法を少し拡張するには、私のスクリプトの一部でプログラム出力の他の部分を使用する必要がありますが、別のフィールドを抽出するためにプログラムを何度も実行したくありません。そのため、プログラムを一度実行し、フル(フィルタリングされていない生)出力を変数としてキャプチャし、シェル変数拡張を使用してその変数から必要なすべてのフィールドを抽出しました。
たとえば、次のようにして出力全体を記憶できます。
du_output_raw=$(du -h 'Anthem - Rush (Cover by Jewel Box).webm')
次に、スペースで区切られたファイルサイズの最初のフィールドを抽出します。
f_size=${du_output_raw%% *)
ファイルのエンコーディングはファイル拡張子にあり、最後のドットの後の部分を抽出します。
f_encoding=${du_output_raw##*.}
これは良い例で悪い例です。出力の一部を別の文字(1つは空白を使用し、もう1つは「.」を使用)で区切って抽出したので大丈夫です。これは、ファイル拡張子を抽出するために実際にdu出力を使用せず、他の変数にすでに存在するファイル名を使用するため、これはお勧めできません。しかし、これは一般的な考えを示しています。
配列変数の出力を覚えて、自動的にフィールドに分割できることを誰かが指摘すると確信しています。
du_output=( $(du -h 'Anthem - Rush (Cover by Jewel Box).webm' )
または(他のシェルでは利用できないbash機能を使用するには):
read -a du_output < <(du -h 'Anthem - Rush (Cover by Jewel Box).webm')
次に、有用な情報を含む配列要素を使用します。
f_size="${du_output[0]}"
f_encoding=${du_output[-1]##*.}