AppleScript: как команда du - sh преобразовывает размер файла в удобочитаемый для человека - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу проверить размер папки в MacOS. Путь к папке «/ Volumes / TSAIYUB / Finished / test folder». Я запускаю эту команду в терминале:

du -s /Volumes/TSAIYUB/Finished/test\ folder

Вывод 9609728. Затем я запускаю эту команду:

du -sh /Volumes/TSAIYUB/Finished/test\ folder

Вывод 4,6 ГБ. В AppleScript я запускаю этот код:

on getSize(posixPath)
    --the code is from:
    --https://forum.latenightsw.com/t/getting-file-folder-sizes-system-events-vs-info-for/904
    set cmdStr to "du -s " & quoted form of posixPath
    set itemSizeStr to (do shell script cmdStr)
    set itemSize to (first word of itemSizeStr)
    --set itemSizeGB to itemSize / (1024 ^ 3)
    return itemSize
end getSize

my getSize("/Volumes/TSAIYUB/Finished/test folder")

Выходное значение равно 9609728. То же самое с выходным значением "du -s". Затем я пытаюсь преобразовать это значение в удобочитаемое человеком в AppleScript. Я нахожу этот код на Inte rnet:

on convertByteSize(byteSize, KBSize, decPlaces)
    --the code is from:
    --https://macscripter.net/viewtopic.php?id=37035
    if (KBSize is missing value) then set KBSize to 1000 + 24 * (((system attribute "sysv") < 4192) as integer)

    if (byteSize is 1) then
        set conversion to "1 byte" as Unicode text
    else if (byteSize < KBSize) then
        set conversion to (byteSize as Unicode text) & " bytes"
    else
        set conversion to "Oooh lots!" -- Default in case yottabytes isn't enough!
        set suffixes to {" K", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"}
        set dpShift to ((10 ^ 0.5) ^ 2) * (10 ^ (decPlaces - 1)) -- (10 ^ decPlaces) convolutedly to try to shake out any floating-point errors.
        repeat with p from 1 to (count suffixes)
            if (byteSize < (KBSize ^ (p + 1))) then
                tell ((byteSize / (KBSize ^ p)) * dpShift) to set conversion to (((it div 0.5 - it div 1) / dpShift) as Unicode text) & item p of suffixes
                exit repeat
            end if
        end repeat
    end if

    return conversion
end convertByteSize

my convertByteSize(9609728, 1000, 0)

Выход 10 МБ. WEIRD! Я погуглил "как команда du преобразует размер байта в читабельный человек", но ничего полезного найти не могу. И код этой топи c в основном на Java, C или другом языке. Я их не понимаю, так как я пишу только простой AppleScript для автоматизации. Надеюсь, кто-нибудь подскажет, что не так с этим обработчиком AppleScript!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...