Ini diposkan ulang dari sini atas permintaan penanya:
du --inodes -S | sort -rh | sed -n \
'1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
Dan jika Anda ingin tetap di sistem file yang sama Anda lakukan:
du --inodes -xS
Berikut beberapa contoh output:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
...
519 /usr/lib/python2.7/site-packages/bzrlib
516 /usr/include/KDE
498 /usr/include/qt/QtCore
487 /usr/lib/modules/3.13.6-2-MANJARO/build/include/config
484 /usr/src/linux-3.12.14-2-MANJARO/include/config
SEKARANG DENGAN LS:
Beberapa orang mengatakan mereka tidak memiliki coreutil terbaru dan opsi --inodes tidak tersedia untuk mereka. Jadi, ini dia:
ls ~/test -AiR1U |
sed -rn '/^[./]/{h;n;};G;
s|^ *([0-9][0-9]*)[^0-9][^/]*([~./].*):|\1:\2|p' |
sort -t : -uk1.1,1n |
cut -d: -f2 | sort -V |
uniq -c |sort -rn | head -n10
Jika Anda penasaran, hati-dan-jiwa dari bagian yang membosankan regex
itu menggantikan filename
setiap ls's
hasil pencarian rekursif dengan nama direktori tempat ditemukan. Dari sana itu hanya masalah memeras nomor inode berulang kemudian menghitung nama direktori berulang dan mengurutkannya.
The -U
pilihan adalah sangat membantu dengan menyortir dalam hal itu secara khusus tidak tidak memilah, dan bukan menyajikan daftar direktori dalam urutan asli - atau, dengan kata lain, dengan inode
nomor.
Dan tentu saja -1
ini sangat membantu dalam memastikan hasil tunggal per baris, terlepas dari kemungkinan memasukkan baris baru dalam nama file atau masalah yang sangat disayangkan yang mungkin terjadi ketika Anda mencoba mengurai daftar.
Dan tentu saja -A
untuk semua dan -i
untuk inode dan -R
untuk rekursif dan itu panjang dan pendek.
Metode yang mendasari ini adalah bahwa saya mengganti setiap nama file ls dengan nama direktori yang berisi sed. Sebagai lanjutan dari itu ... Yah, aku sendiri agak kabur. Saya cukup yakin itu secara akurat menghitung file, seperti yang Anda lihat di sini:
% _ls_i ~/test
> 100 /home/mikeserv/test/realdir
> 2 /home/mikeserv/test
> 1 /home/mikeserv/test/linkdir
Ini memberikan saya hasil yang hampir sama dengan du
perintah:
DU:
15K /usr/share/man/man3
4.0K /usr/lib
3.6K /usr/bin
2.4K /usr/share/man/man1
1.9K /usr/share/fonts/75dpi
1.9K /usr/share/fonts/100dpi
1.9K /usr/share/doc/arch-wiki-markdown
1.6K /usr/share/fonts/TTF
1.6K /usr/share/dolphin-emu/sys/GameSettings
1.6K /usr/share/doc/efl/html
LS:
14686 /usr/share/man/man3:
4322 /usr/lib:
3653 /usr/bin:
2457 /usr/share/man/man1:
1897 /usr/share/fonts/100dpi:
1897 /usr/share/fonts/75dpi:
1890 /usr/share/doc/arch-wiki-markdown:
1613 /usr/include:
1575 /usr/share/doc/efl/html:
1556 /usr/share/dolphin-emu/sys/GameSettings:
Saya pikir include
masalahnya tergantung pada direktori mana program terlihat pada awalnya - karena mereka file yang sama dan di-hardlink. Agak suka hal di atas. Saya bisa salah tentang itu - dan saya menerima koreksi ...
DU DEMO
% du --version
> du (GNU coreutils) 8.22
Buat direktori pengujian:
% mkdir ~/test ; cd ~/test
% du --inodes -S
> 1 .
Beberapa direktori anak-anak:
% mkdir ./realdir ./linkdir
% du --inodes -S
> 1 ./realdir
> 1 ./linkdir
> 1 .
Buat beberapa file:
% printf 'touch ./realdir/file%s\n' `seq 1 100` | . /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Beberapa hardlink:
% printf 'n="%s" ; ln ./realdir/file$n ./linkdir/link$n\n' `seq 1 100` |
. /dev/stdin
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Lihatlah hardlinks:
% cd ./linkdir
% du --inodes -S
> 101
% cd ../realdir
% du --inodes -S
> 101
Mereka dihitung sendiri, tetapi naik satu direktori ...
% cd ..
% du --inodes -S
> 101 ./realdir
> 1 ./linkdir
> 1 .
Kemudian saya menjalankan skrip saya dari bawah dan:
> 100 /home/mikeserv/test/realdir
> 100 /home/mikeserv/test/linkdir
> 2 /home/mikeserv/test
Dan Graeme:
> 101 ./realdir
> 101 ./linkdir
> 3 ./
Jadi saya pikir ini menunjukkan bahwa satu-satunya cara untuk menghitung inode adalah dengan inode. Dan karena menghitung file berarti menghitung inode, Anda tidak dapat menghitung dua kali inode - untuk menghitung file secara akurat inode tidak dapat dihitung lebih dari sekali.