このファイルは以下によって生成されました。
ls -Raltr -block-size=M /* > /home/root/all_files.txt
grepを使って複数のコマンドを試しましたが、成功しませんでした。
答え1
最も簡単な方法は、-S
withを使用して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
sort
with -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 '^-'
ハイフンで始まらない行(たとえば、d
forディレクトリまたはリンクでl
始まる行)は削除されます。
この答えはXubuntu 16.04のGNUツールについてです。 MacOSまたはBSDシステムではテストされていません。
答え2
現在のディレクトリ内または下のすべての一般ファイルをサイズ別にソートするために、シェルはパス名内で一致するzsh
便利なワイルドカードパターンを提供します(たとえば、「サブディレクトリに再帰的に移動する」)。それも許可します**
/
適格通常のファイルの一致のみを取得し、結果はそのファイルのサイズに従ってソートされるモードです。
zsh
シェルでは、このパターンは次のとおりです。
**/*(.OL)
これにより、すべての一般ファイル()が.
逆順()サイズ順()でソートされて返されます。O
L
ファイルのリストのみを取得するには、次を使用してください。
printf '%s\n' **/*(.OL)
ls
「長いリスト」出力を取得するには、次のようにします。
ls -fl **/*(.OL)
(この-f
オプションはls
ファイルのソートを防ぎます。)
zsh
通常のシェルでなくても、次のコマンドを使用できますzsh
。
zsh -c 'ls -fl **/*(.OL)'
--block-size=M
GNUを使用している場合は、もちろんこれを追加することもできますls
。
最大のトップ10ファイルにのみ興味がある場合は、次のパターンを使用してください。
**/*(.OL[1,10])
代わりに。