Bash как получить размер файла

Как узнать размер файла в Bash

Как узнать размер файла с помощью bash?
Например, вы должны записать длину файла в переменную $file_size,
затем использовать этот критерий для поиска файлов, указанных в сценарии.

Рекомендовать сценарии оболочки bash для Linux/Unix в FAQ

Я новичок в сценариях оболочки bash. Как получить размер файла в моем сценарии оболочки bash и сохранить этот размер файла в переменной оболочки bash?

Вы не можете получить размер файла в сценарии bash с помощью внутренней или встроенной команды. Вам понадобится несколько команд, в том числе stat. Командная строка stat отображает информацию о файле, включая его размер. Другой вариант — использовать команду wc, которая может подсчитать количество байтов в любом заданном файле. Давайте посмотрим, как использовать эти две команды для проверки размера файла в Linux или Unix.

Как проверить размер файла в системе Unix с помощью команды wc

Команда wc отображает количество строк, слов и байтов, содержащихся в файле. Чтобы получить размер файла, используйте следующий синтаксис:

Примеры возможных выходных данных:

Вы можете легко извлечь первое поле, используя команду вырезания или awk команда:

Примеры возможных выходных данных:

или присвоить этот размер переменной bash:

Как проверить размер файла в bash с помощью команды stat

Команда stat отображает информацию о файле. Выяснить размер файла в GNU/Linux с помощью команды stat, используйте следующий синтаксис:

Присвоение этого размера переменной bash:

Используйте следующий синтаксис, чтобы найти размер файла в BSD/MacOS с помощью команды

Обратите внимание, что если файл является символической ссылкой, вы можете получить размер этой ссылки только с помощью команды stat.

примеры команд du

Синтаксис следующий

Примеры возможных выходных данных вышеуказанных команд:

Рисунок 01: Как проверить размер файла с помощью оболочки bash/ksh/zsh/sh/tcsh?

Найти пример команды

Синтаксис следующий:

Источник

Размер файла

В этой небольшой статье мы поговорим о том, как узнать размер файла в Linux с помощью различных утилит. Проще всего узнать этот параметр в графическом интерфейсе, но многие обычно работают в терминале и им нужно знать, как там решается эта задача.

Вы узнаете, как просмотреть размер файла с помощью файлового менеджера, ls и du. У нас есть отдельные статьи об этих инструментах, но в этой статье основное внимание будет уделено рассмотрению размера конкретного файла.

Размер файла Linux

1. Nautilus

Чтобы просмотреть размер файла в диспетчере файлов, сначала найдите нужный файл и щелкните его правой кнопкой мыши. В открывшемся меню выберите Свойства :

Программа откроет окно, в котором будут перечислены свойства файла, среди них будет размер:

2. Команда ls

Чтобы инструмент ls отображал размеры файлов в удобочитаемом для человека формате, необходимо использовать этот параметр -h. Например:

Читайте также:  Ubuntu как открыть порт 27015

Здесь размер отображается в пятой колонке. Чтобы увидеть размер конкретного файла, передайте утилите его имя:

ls -lh ‘Screenshot 2020-08-10 20-22-50.png’

Вы также можете ввести единицы для отображения размера вручную. Для этого используйте параметр —block-size . Например, мегабайты:

ls -l —block-size=M

Вместо ls вы можете использовать команду ll, ее вывод очень похож на команду ls -l:

3. Утилита stat

Помимо метаданных, программа Stat позволяет отображать размер файла в байтах. Например:

stat ‘Screenshot 2020-08-10 20-22-50.png’

Если вы хотите отобразить только размер, используйте опция s формат %s :

stat -c %s ‘Скриншот 2020-08-10 20-22-50.png’

4. Утилита du

du специально разработана для отображения размера файлов в папке. Вы можете увидеть размер конкретного файла, например:

du -h ‘Снимок экрана 2020-08-10 20-22-50.png’

— h позволяет выводить размеры в удобочитаемом формате. Если хочешь чтобы увидеть размеры всех файлов в папке, просто укажите путь к папке:

А если вы хотите узнать размер папки в Linux, используйте -с вариант. Добавляет размеры всех объектов:

5. Инструмент ncdu

Программа ncdu позволяет анализировать место на диске, занимаемое файлами и каталогами. Но он не поставляется с системой. Для его установки выполните:

sudo apt install ncdu

Затем просто укажите в параметрах директорию, размер которой вы хотите видеть:

Все файлы будут отсортированы по размеру и общий размер этой папки будет показан ниже:

6. инструмент поиска

Вы не можете найти размер файла с помощью этого инструмента, но вы можете найти файлы определенного размера. Вы можете использовать параметр размера, чтобы указать ограничения размера файлов, которые нужно найти. Например, больше 2000k, но меньше 2500k:

/Images/ -size +2000k -size -2500k

Размер также может быть указан в мегабайтах, используйте префикс M или в байтах , поэтому префикс не нужен.

Выводы

В этой короткой статье мы узнаем, как узнать размер файлов Linux и как просмотреть размер каталога и всех содержащихся в нем файлов с помощью различных инструментов. . Какие способы определения размеров вы используете? Напишите в комментариях!

Источник

Как получить размер файла в сценарии bash?

Как я могу получить размер файла в скрипте bash?

Как присвоить это переменной bash, чтобы я мог использовать его позже?

Лучшее решение, если вы используете систему GNU:

ПРИМЕЧАНИЕ: см. . Ответ @chbrown на то, как использовать статистику в терминале в Mac OS X.

Проблема с использованием статистики заключается в том, что это расширение GNU (Linux). du -k и cut -f1 определены POSIX и, следовательно, переносимы на любую систему Unix.

Например, Solaris поставляется с Bash, но не со стат. Так что это не совсем гипотетически.

У ls есть аналогичная проблема, заключающаяся в том, что точный формат вывода не указан, поэтому анализ его вывода не может быть выполнен переносимым способом. du -h также является расширением GNU.

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

Вы также можете использовать команду подсчета слов ( wc ):

Проблема с wc заключается в том, что она добавляет имя файла и отступ. Например:

Если вы хотите избежать связывания полностью интерпретируемого языка или потокового редактора только для получения счетчика размера файла, просто перенаправьте ввод файла, чтобы wc никогда не видел имя файла:

Читайте также:  Skyforge как получить агенты

Это Последняя форма может использоваться с подстановкой команд, чтобы легко получить значение, которое вы искали, в качестве переменной оболочки, как упомянуто Жилем ниже.

Статистика BSD (Mac OS X) имеет флаг аргумента другого формата и другие спецификаторы полей. Из мужской статистики (1):

  • -f format : Отображать информацию в указанном формате. Описание допустимых форматов можно найти в раздел ФОРМАТЫ.
  • . раздел ФОРМАТЫ.
  • z : Размер файла в байтах.

Итак, теперь все вместе:

Зависит от того, что вы подразумеваете под размером .

указывает количество байтов, которые можно прочитать из файла. IOW, это размер содержимого файла. Однако он будет читать содержимое файла (за исключением случаев, когда файл является нормальным). файл или символическую ссылку на обычный файл в большинстве реализаций wc в качестве оптимизации). Это может иметь побочные эффекты. Например, для именованного канала то, что было прочитано, не может быть прочитано снова, а для таких элементов, как /dev/zero или /dev/random, которые имеют бесконечный размер, это займет некоторое время. Это также означает, что вам нужно разрешение на чтение файла, и метка времени последнего доступа к файлу может быть обновлена.

Это стандартно и переносимо, однако обратите внимание, что некоторые реализации wc могут включать начальные пробелы в этом выводе. Один из способов избавиться от них — использовать:

или избежать ошибки о пустом арифметическом выражении в тире или yash, когда wc ничего не печатает (например, когда файл не может быть открыт):

ksh93 имеет встроенный wc (если вы его включите, вы также можете вызвать его как команду /opt/ast/bin/wc), что делает его наиболее эффективным для общих файлов в этой среде.

Многие системы имеют команду stat, которая является интерфейсом для системных вызовов stat() или lstat().

Отчеты информация находится в inode. Одним из таких фрагментов информации является атрибут st_size. Для обычных файлов это размер содержимого (сколько данных можно прочитать без ошибок (это то, что использует большинство реализаций wc -c при оптимизации)). Для символических ссылок это размер пути назначения в байтах. Для именованных каналов, в зависимости от системы, это 0 или количество байтов, находящихся в настоящее время в буфере канала. То же самое для блочных устройств, где в зависимости от системы вы получаете 0 или размер основного хранилища в байтах.

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

В хронологическом порядке они следующие:

возвращает атрибут st_size $file ( lstat() ) или:

То же, за исключением случая, когда $file является символической ссылкой, в в этом случае это st_size файла после разрешения символической ссылки.

zsh stat Встроенный (теперь также известный как zstat) в модуле zsh/stat (загружается с помощью zmodload zsh/stat) (1997):

или хранится в переменной:

это, по-видимому, наиболее эффективно в этой оболочке.

Статистика GNU (2001 г.); также в BusyBox 2005 stat (скопировано из GNU stat):

(Обратите внимание, что -L является противоположностью IRIX или zsh stat.

Или вы можете использовать stat() / lstat()) функция некоторых языков сценариев, таких как perl:

Читайте также:  Silver chariot yba requiem как получить

AIX также имеет команду istat, которая выводит любую информацию, которую может обработать stat() (не lstat() , поэтому она не будет работать с символическими ссылками), например:

(размер соответствует разрешению символической ссылки)

Задолго до того, как GNU представила свою команду stat, вы могли сделать то же самое с командой GNU find с ее предикатом -printf (еще в 1991 г. ):

Но проблема в том, что это не работает, если $file начинается с -o в предикате поиска (например, !, ( . ).

Стандартная команда для получения информации is stat() / .lstat() ls

ПОЛОЖИТЕЛЬНО вы можете сделать:

и добавить -L equals после разрешения символической ссылки Это не работает для файлов устройств, хотя пятое поле — это номер устройства, а не размер

У блочных устройств U есть системы, в которых stat() возвращает 0 для st_size, часто другие API для сообщения о размере блочного устройства, например, в Linux есть BLKGETSIZE64 ioctl(), и большинство дистрибутивов Linux теперь поставляются с blockdev, которую вы можете использовать:

K однако вам нужно разрешение на чтение файла устройства, вы обычно можете получить размер другими способами Например, (все еще на L inux):

Должен работать, за исключением пустых устройств

И Подход, который работает для всех доступных для поиска файлов (включая обычные файлы, большинство блочных устройств и некоторые символьные устройства), заключается в открытии файла и поиске до конца:

Использование zsh (после загрузки модуля zsh/system):

Мы видели, что для именованных каналов некоторые системы (по крайней мере, AIX, Solaris, HP/UX ) заставляют объем данных в буфере канала быть доступным в st_size из государство(). Некоторые (например, Linux или FreeBSD) этого не делают.

По крайней мере, в Linux вы можете использовать FIONREAD ioctl() после открытия канала (в режиме чтения+ввода, чтобы избежать зависания):

Однако обратите внимание, что когда вы не читаете содержимое канала, простое открытие именованного канала может иметь побочные эффекты. fixer Сначала мы используем fixer, чтобы проверить, есть ли у некоторых процессов уже открытый канал, чтобы упростить задачу, но это ненадежная задача, потому что fixer не может проверить все процессы.

До сих пор мы рассматривали только размер основных данных, связанных с файлами. При этом не учитывается размер метаданных или вспомогательная инфраструктура, необходимая для хранения этого файла.

Следующим индексным узлом, возвращаемым функцией stat(), является st_blocks. Это количество 512-байтовых блоков, используемых для хранения данных файла (а иногда и некоторых его метаданных, таких как расширенные атрибуты в файловых системах Linux ext4). Это не включает сам индекс или записи в каталогах, с которыми связан файл.

Размер диска и использование не обязательно тесно связаны, поскольку сжатие, разреженность (иногда некоторые метаданные) и другая инфраструктура, такая как непрямые блоки в некоторых файловых системах, влияют на него в последнюю очередь.

Обычно это du используется для отчета об использовании диска. Большинство приведенных выше команд смогут получить эту информацию.

  • POSIXLY_CORRECT=1 ls -sd — «$file» внутри).
  • GNU Search — «$file» -printf ‘%b\n’
  • zstat -L +block — $file
  • GNU stat -c %b — — «$file»
  • BSD Stat -f %b — «$file»
  • perl -le ‘print((lstat shift)[12])’ — «$file »

Источник

Поделиться с друзьями
Решатор