Скрипт, который вычитает два размера файла - PullRequest
1 голос
/ 06 ноября 2019

Я хотел бы вычесть размеры двух файлов. Я нашел расположение этих файлов и затем использовал команду:

du -h /bin/ip | cut -d "K" -f1 

Я получил 508 и хотел создать переменную

x=$((du -h /bin/ip | cut -d "K" -f1))

, но в результате я получил

"- bash: du -h / bin / ip | cut -d 'K' -f1: деление на 0 (маркер ошибки" bin / ip | cut -d 'K' -f1 ")"

Что я сделал не так? Как я могу положить это значение в переменную?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Что я сделал не так?

Вы использовали арифметическое расширение $(( ... )) вместо подстановки команд $( ... ). В результате оболочка интерпретировала /bin как / как деление и bin как 0 (потому что нет переменной с именем bin) и пыталась разделить на 0.

Какя могу поместить это значение в переменную?

Используйте подстановку команд:

x=$(du -h /bin/ip | cut -d "K" -f1)

Но было бы гораздо надежнее использовать stat для сбора информации о файлах:

x=$(stat -c %s /bin/ip)

Чтобы вычесть два размера файла, вы можете снова использовать подстановки команд, чтобы получить размер, но использовать арифметическое расширение, чтобы вычислить разницу.

difference=$(( $(stat -c %s file1) - $(stat -c %s file2) ))
0 голосов
/ 06 ноября 2019

Perl в помощь!

perl -le 'print((-s "file1.txt") - (-s "file2.txt"))'
  • -l добавляет новую строку в print
  • -s возвращает размер файла (см. -x )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...