すべてのファイルをサイズの大きいものから小さいものの順にリストしたいと思います。ファイルは特定のフォルダーのどこにでも存在できます。
man ls
:-S sort by file size
すべてのファイルをサイズの大きいものから小さいものの順にリストしたいと思います。ファイルは特定のフォルダーのどこにでも存在できます。
man ls
:-S sort by file size
回答:
次のようなものを使用するだけです。
ls -lS /path/to/folder/
資本金S。
これはファイルをサイズでソートします。
参照:
-S sort by file size
逆順でソートしたい場合は、-r
スイッチを追加してください。
更新:
ディレクトリを除外するには(および、ファイル名またはsymlinkターゲットに改行文字が含まれていない場合):
ls -lS | grep -v '^d'
アップデート2:
フォルダーであるシンボリックリンクがどのように表示されるかがわかりました。リンクのように、シンボリックリンクは常に文字lで始まります。
をフィルタリングするコマンドを変更します-
。これにより、通常のファイルのみが残ります。
ls -lS | grep '^-'
私のシステムでは、これは通常のファイルのみを表示します。
アップデート3:
再帰を追加するには、行のソートをsort
コマンドに任せ、5番目の列を使用してソートするように指示します。
ls -lR | grep '^-' | sort -k 5 -rn
-rn
は、最大のファイルを最上部に取得するためのリバースと数値を意味します。このコマンドの欠点は、ファイルの完全なパスが表示されないことです。
ファイルのフルパスが必要な場合は、次のようなものを使用します。
find . -type f -exec du -h {} + | sort -r -h
このfind
コマンドは、のすべてのサブディレクトリにあるすべてのファイルを再帰的に検索し.
、呼び出しdu -h
(ディスク使用率-人間が読み取れることを意味します)してから、出力を再度ソートします。あなたの場合はfind
/がsort
サポートされていない-h
、と交換してくださいdu -k
とsort -rn
。サイズとディスク使用量は同じではないことに注意してください。
du
ファイルサイズとは異なるディスク使用量を提供します。(GNU)du -h
では、数値の並べ替えは機能しません(並べ替えには-h
GNUオプションが必要です)。xargsは入力として引用される可能性のある単語のリストを想定しているため、ファイル名に空白または引用文字が含まれている場合は機能しません。
find . -type f -print0 | xargs -0 du -h | sort -rh
。あなただけの、最大30個のファイルを言いたい場合:find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
。
+ |
構文を説明していただけます+ | sort -r -h
か?
検索や並べ替えなどを使用できます。
find . -type f -ls | sort -r -n -k7
(この-ls
オプションは標準ではありませんが、GNUだけでなく多くのfind実装で見つかります。GNUfindなどでls -li
は、いくつかの例外を除いて似たようなものが表示されます。たとえば、ACLを持つファイルは+
GNU findおよびGNU sortを使用して、ファイル名に改行文字が含まれる場合:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
zshおよびGNU lsの場合:
ls -ldU -- **/*(.OL)
どこに(.OL)
あるグロブ修飾子は、.
選択するために、定期的に、ファイルのみをOL
(ファイルサイズ、長さによって順序を逆にするo
、昇順ためO
降順)。
(zshの古いバージョンでは、ファイルサイズが2 ^ 32を超える問題があったことに注意してください)。
一部のオペレーティングシステムでは、コマンドに渡される引数リストのサイズに制限があります。これらの場合、次のものが必要です。
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
詳細な出力ではなくファイルのリストだけが必要な場合は、次のようにします。
print -rl -- **/*(.OL)
隠しファイル(名前がドットで始まる、.
およびを除く..
)を隠し、隠しディレクトリも検索する場合は、D
グロビング修飾子を追加します。
print -rl -- **/*(.DOL)
.OL
ますか?それはコマンドの一部ですか?
ls (GNU coreutils) 8.25
していzsh 5.1.1 (x86_64-ubuntu-linux-gnu)
ます。それが唯一の特定のバージョンのために働くんls
やzsh
?
「ファイルは特定のフォルダのどこにでも存在する可能性がある」と言うことは、開始ディレクトリ(フォルダ)内のすべてのディレクトリ(フォルダ)を再帰的に下降させることを意味します。これが何find
を意味するかです:
find . -type f -exec ls -lSd {} +
これにより、現在の作業ディレクトリ()内のすべてのファイルが「検索」されます.
。見つかったファイルごとにls
、見つかったオブジェクトをサイズ順にソートするプロセスが実行されます。の+
ターミネータにより、-exec
複数の引数がリストとしてに渡されls
ます。ディレクトリ(フォルダ)に非常に多くのファイルが含まれている場合を除き、1つのリスト(つまり、1つのプロセスが分岐)があり、希望する結果が得られます。
私はしばらく前にこの程度まで何かを書きました。引数を渡して、リストするファイルの数を指定するか、単に入力するだけbig
で、その場合は10を取得できます。
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
これらを試してください、それは私のためにうまくいきます。
$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10
# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'
完璧な答えではありませんが、ある程度機能します
$ ls -lS |grep '^-' | head -n 6
sed
、出力をカットする
デルの答えとステファンシャゼラスのコメントに追加...
find -print0
と組み合わせてxargs -0
、空白/スペース/その他のサポートを追加します。
du -h | sort -rn
異なるバイトの倍数間で適切にソートされません。たとえば、128Kの後に1.1Mが表示されるのは間違っています
sort -rh
(--human-numeric-sort)はそれを処理しますが、GNUのバージョンでのみ動作します。
以下のコマンドは、目的の出力を提供します。
人間が読める、GNUのソート/ Linux:
find . -type f -print0 | xargs -0 du -h | sort -rh
キロバイト単位、BSD / OSX /その他:
find . -type f -print0 | xargs -0 du -k | sort -rn
BSD / OSXについては、https: //unix.stackexchange.com/a/188375/82895も参照してください。
元の質問のバリエーションとして、サブディレクトリ内のファイルの累積サイズを表示する場合:
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
サイズはメガバイト単位で表示されます(m
in du -sm
)。受け入れられるその他の値du
は-k
、キロバイト、-g
ギガバイトです。-h
人間が判読できる表示に使用することは、並べ替えを中断するため不可能です。
これsed
はM
forメガバイトを追加するために使用するバージョンです。
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
表示するディレクトリは${1:-.}
、最初のコマンドライン引数が使用されている場合はそれを使用し、引数なしで呼び出されている場合は現在のディレクトリを使用して設定されます。
注:これは、多くのファイルで長時間かかる場合があります。このオプション-type d
は、サブディレクトリのみをリストし、現在のフォルダー内のファイルを除外します。現在のフォルダー内のファイルも表示する場合は、削除します。
注:
ncdu
代わりに、ほとんどのLinuxリポジトリ(ubuntu / debianapt install ncdu
)およびosx(brew install ncdu
)で使用可能なものを使用することをお勧めします。