Почему Finder и du сообщают о разном размере файла?

3245
flipdoubt

Я пишу скрипт geektool 3, чтобы показать размер конкретной виртуальной машины VMware Fusion. Такой .vmwarevm«файл» действительно является упакованным каталогом.

Get Info в Finder говорит, что файл "52,91 ГБ". Я запускаю следующую duкоманду, чтобы получить размер файла:

> du -hs ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '' 

Эта du -hsкоманда возвращает размер файла как "49G". Чем объясняется отличие отчетов Finder?

В качестве альтернативы я попытался заменить -sопцию на -dтакую:

du -hd ~/Documents/Virtual\ Machines.localized/MY-PRECIOUS-7.vmwarevm | awk '' 

Эта du -hdкоманда возвращает размер файла как "59G". Чем объясняется разница между Finder du -hdи du -hs?

Кроме того, эта du -hdкоманда не производит вывод в geektool 3. Что дает?

3

3 ответа на вопрос

6
Nifle

Не Mac OS X, но я где-то читал, что Finder в настоящее время использует base-10.

Может ли быть разница, что du все еще использует base-2?

49.0 GiB * (1024^3 bytes / GB) = 52,613,349,376 bytes = 52.6 GB 

(небольшая разница в том, что duокругляется до ближайшего ГБ)

Версия base-2 наверняка будет * меньше *, правда? Phoshi 14 лет назад 0
@Phoshi - нашедший говорит 52,91, дю говорит 49 Nifle 14 лет назад 0
Ах да, ты прав. Я неправильно понял этот второй "59G". Phoshi 14 лет назад 0
Кто-нибудь знает, как написать скрипт, который конвертирует вывод du в базу 10? flipdoubt 14 лет назад 0
4
Cry Havok

Также обратите внимание, что «du» возвращает фактическое используемое дисковое пространство, тогда как другие инструменты возвращают выделенное пространство. Там, где у вас есть разреженные файлы, эти 2 значения могут быть совершенно разными - у меня есть файл, которому выделено 2 ТБ, но он занимает всего около 200 МБ дискового пространства.

Какой инструмент командной строки, который отображает выделенное пространство в OS X? flipdoubt 14 лет назад 0
`ls` будет (как описано Стивеном). Cry Havok 14 лет назад 0
3
Stephen Jennings

Нифл это правильно. duвозвращает base-2, Finder возвращает base-10 и 49GiB ≈ 52,91GB

Аргумент -d требует, чтобы вы указали глубину. Из экспериментов, которые вы только что получили, вы можете получить что-то, кроме числа для глубины, он съест аргумент, который вы указали, и будет вести себя так, как если бы вы это сделали -d 0. Получаемый вами 59G - это размер текущего каталога, а не размер файла vmwarevm.

Вот эксперимент, который я провел:

[~]$ ls -d Code Code/  [~]$ du -h -s Code 8.3M Code  [~]$ du -h -d 0 Code 8.3M Code  [~]$ du -h -d Code 38G . <-- this is the size of ~/  [~]$ du -h -d 0 38G . 

Вы можете прочитать справочную страницу Mac OS X du (1) для получения дополнительной информации.