Отримання розміру лише з файлами


51

Як я можу отримати розмір усіх файлів та всіх файлів у його підкаталогах за допомогою команди du.

Я намагаюсь виконати наступну команду, щоб отримати розмір усіх файлів (і файлів у підкаталогах)

find . -type f | du -a

Але це також виводить розміри папок. Як я можу отримати перелік розмірів усіх файлів і файлів у підкаталогах? Я також спробував, exec flagале я не впевнений, як передати висновок в іншу команду після того, як вона виконує результати findв du.

Операційна система AIX 6.1 з ksh оболонкою.

Відповіді:


57

Зазвичай я користуюся -execутилітою. Подобається це:

find . -type f -exec du -a {} +

Я спробував це і на bash і ksh з GNU find. Я ніколи не пробував AIX, але впевнений, що ваша версія пошуку має якийсь -execсинтаксис.

Наступний фрагмент сортує список, найбільший перший:

find . -type f -exec du -a {} + | sort -n -r | less

3
Я б відповів, якщо у вас немає доступу до find -print0інших функцій GNU. Якщо це можливо, заміна \;на \+призведе до меншої кількості викликів duі, таким чином, до кращої продуктивності.
jw013

Дякую, це чудово виходить, тим більше, що du пропонує прапор розміром у різних одиницях.
Шардул Упадхей

Не вдалося знайти інформацію про +варіант. Це варіант для duабо для find? І чому це призводить до меншої кількості дзвінків?
Амеліо Васкес-Рейна

1
Це стандартний варіант find. Він вказує execкоманді (в нашому випадку du) лише один раз, при цьому всі результати findнаведені як послідовні аргументи для команди.
rahmu

wtf, чому не існує такої команди, якdu -f --threshold=1G
Олександр Міллс

16

Якщо у вас є утиліти GNU, спробуйте

find . -type f -print0 | du --files0-from=-

Команда не вдається сказати print0 не є дійсною командою, і останній мінус не був розпізнаним прапором. Я не думаю, що такий підхід працюватиме, оскільки man duне відображає filesані fromпрапорців, ані прапор.
Шардул Упадхей

Ви повинні додати свою операційну систему як тег до питання. Я припускав, що у вас є GNU, але забув це згадати.
jw013

1
Запросити мене! Ваше конкретне рішення працює з тим, du -chщоб отримати загальну кількість відповідних файлів:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn

9

Я зазвичай використовую:

find . -type f -print0 | xargs -r0 du -a

Xargs зазвичай викликає команду, навіть якщо аргументів не передано; xargs du </dev/nullвсе одно буде називатися, xargs -r du </dev/nullне дзвонить ду. В -0аргументі виглядає для завершального нуля рядків , замість символу нового рядка припиняється.

Тоді я зазвичай додаю | awk '{sum+=$1} END {print sum}'в кінці, щоб отримати загальну суму.


2
then I usually addВарто золота :-)
Radek

2

Ось версія з довгими назвами параметрів та сортуванням людини.

find . -type f -exec du --human {} + | sort --human --reverse | head

Я також не бачив необхідності -a/--allпереходити до нього du.


-2

конкретні файли в поточному режимі

du -ch files*

коротше і працює для мене

du -sh .

для поточного dir та всіх файлів у підпункті

du (GNU coreutils) 8.30


1
(1) Що ви маєте на увазі під du -ch files*? Припустимо , що поточний каталог містить ant, apple, banana, bat, cat, corn, date, і dog, де імена тварин підкаталоги і фрукти / овочі імена файлів - то , що команда буде використовувати , щоб отримати тільки файли? Або це не те, що ви мали на увазі? (2)  du -sh .повідомить лише про загальну кількість всього, що знаходиться в поточному каталозі та під ним, а не самі файли. Це майже протилежне тому, що було задано питанням.
G-Man каже "Відновити Моніку"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.