テキストファイル.txtの内容をファイルサイズで並べ替える方法

テキストファイル.txtの内容をファイルサイズで並べ替える方法

このファイルは以下によって生成されました。

ls -Raltr -block-size=M /* > /home/root/all_files.txt

grepを使って複数のコマンドを試しましたが、成功しませんでした。

答え1

最も簡単な方法は、-Swithを使用してlsディレクトリの内容をサイズでソートすることです。ファイルはまだディレクトリごとにグループ化されていますが、これはおそらく望むものではないかもしれません。

ls -RaltrS --block-size=M /*

この方法はここではオプションではないかもしれません。all_files.txtファイルが古いか、別のコンピュータで作成された可能性があります。ファイルサイズでファイル名を並べ替えることはまだ可能です。一般的なファイルの場合ls -Raltr --block-size=M(1つではなく2つのハイフンで始まる注)によって生成された出力行は--block-size次のとおりです。

-rw-rw-r-- 1 owner group 1M Apr 16 05:37 file.txt

sortwith -h(人が読める数字(例:1M))と-k 5テキストの5番目の列(スペースで区切られた)を使用してファイルサイズを指定します。

sort -k 5 -h /home/root/all_files.txt

ls -Raltr --block-size=M /*/home/root/all_files.txtファイルサイズがリストされていない追加の行があるため、保存された出力を並べ替えるのは混乱する可能性があるため、最初に必要なgrep行だけを取得するには、次のようにします。

grep '^-' /home/root/all_files.txt | sort -k 5 -h

ここで、grep '^-'ハイフンで始まらない行(たとえば、dforディレクトリまたはリンクでl始まる行)は削除されます。

この答えはXubuntu 16.04のGNUツールについてです。 MacOSまたはBSDシステムではテストされていません。

答え2

現在のディレクトリ内または下のすべての一般ファイルをサイズ別にソートするために、シェルはパス名内で一致するzsh便利なワイルドカードパターンを提供します(たとえば、「サブディレクトリに再帰的に移動する」)。それも許可します**/適格通常のファイルの一致のみを取得し、結果はそのファイルのサイズに従ってソートされるモードです。

zshシェルでは、このパターンは次のとおりです。

**/*(.OL)

これにより、すべての一般ファイル()が.逆順()サイズ順()でソートされて返されます。OL

ファイルのリストのみを取得するには、次を使用してください。

printf '%s\n' **/*(.OL)

ls「長いリスト」出力を取得するには、次のようにします。

ls -fl **/*(.OL)

(この-fオプションはlsファイルのソートを防ぎます。)

zsh通常のシェルでなくても、次のコマンドを使用できますzsh

zsh -c 'ls -fl **/*(.OL)'

--block-size=MGNUを使用している場合は、もちろんこれを追加することもできますls

最大のトップ10ファイルにのみ興味がある場合は、次のパターンを使用してください。

**/*(.OL[1,10])

代わりに。

関連情報