Вы можете проверить /proc/partitions
, чтобы увидеть количество блоков в данном разделе, и использовать lsblk
или df
, чтобы проверить размер раздела в байтах. Количество байтов, разделенных блоками, даст размер блока в байтах.
Например, на моем рабочем столе:
$ cat /proc/partitions
major minor #blocks name
8 0 312571224 sda
8 1 308392960 sda1
8 2 1 sda2
8 5 4175872 sda5
11 0 19930 sr0
8 16 244198584 sdb
km0@mkdisplay:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298.1G 0 disk
├─sda1 8:1 0 294.1G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdb 8:16 0 232.9G 0 disk
sr0 11:0 1 19.5M 0 rom
$ python
Python 2.7.13 |Anaconda, Inc.| (default, Sep 22 2017, 00:47:24)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 298.1*1024*1024*1024/312571224.
1024.03040701661
Оболочка bash
может рекурсивно обращаться к каталогам с помощью специального шаблона **
подстановки. Шаблон **
совпадает с *
, но также охватывает /
в путях :
shopt -s globstar nullglob dotglob
for dirpath in./**/; do
printf '%s\n' "$dirpath"
# whatever other code needs to be run on "$dirpath"
done
Я разрешаю globstar
получать доступ к **
, а также разрешаю nullglob
и dotglob
полностью пропускать цикл, если шаблон ничему не соответствует, а также увидеть скрытые файлы.
Шаблон ./**/
будет соответствовать любому каталогу в текущем каталоге или ниже него, точно так же, как ./*/
будет соответствовать любому каталогу в текущем каталоге.
Используйте ./**/*
или ./**
, чтобы вывести список всех типов файлов.
Вы также можете сделать это портативно с помощьюfind
:
find. -type d -exec sh -c '
for dirpath do
printf "%s\n" "$dirpath"
# whatever other code needs to be run on "$dirpath"
done' sh {} +
Здесь find
передает в цикл скрипта sh -c
пути к каталогам.
Единственная разница, которую вы увидите при запуске этих двух примеров, заключается в том, что в первом примере (цикл bash
с**
)разрешает символические ссылки на каталоги,в то время как find
не разрешает символическую ссылку на каталоги.
Если все, что вам нужно, это перечислить каталоги, то пример find
можно значительно сократить до
find. -type d -print
Используйте -type f
вместо -type d
, чтобы просматривать только обычные файлы, и полностью удалите тест -type
, чтобы просматривать все типы файлов.
Очевидно, вы могли бы также использовать ls
для получения такого списка, но я не вижу в этом особого смысла, так как вы все равно ничего не можете сделать, кроме как смотреть на вывод из ls
.
shopt -s globstar dotglob
ls -1d./**
Обратите внимание, что эта команда может вызвать ошибку «слишком длинный список аргументов», если список путей, до которых расширяется шаблон, слишком длинный. Ни одна из других команд в этом ответе не имеет этой проблемы.
Также обратите внимание, что на самом деле ls
не выполняет какую-либо рекурсию здесь, это оболочка, расширяющая шаблон ./**
, который рекурсивно выполняет, и она делает это, чтобы создать список аргументов для ls
перед ls
даже вызывается.