Существует ли команда, которая разрешает посещать открытию, содержит ли файл что-то?
Я попробовал ls
'опция размера (ls -lsh
) но это не показывает мне пустые файлы, потому что файлы/папки не имеют никакого размера.
Мы могли проанализировать файл использованием размера du
команда.
$> du Desktop/datasheet-3347.pdf
3564 Desktop/datasheet-3347.pdf
Однако существует маленькая выгода. Что мы подразумеваем под пустым файлом? Знайте, что существуют файлы с непечатаемыми символами. Вот пример:
$> touch myFile.txt
$> echo '' > myFile.txt
$> du myFile.txt
4 myFile.txt
Посмотрите! Я повторил вакуум в файл, и все же он сообщает о некотором размере в байтах? как это может быть?! Ну, мы все еще записали единственную новую строку в файл.
Как показано в этом блестящем ответе, файлы на дисках находятся в блоках 4 096 байтов. Когда мы пишем всего несколько байтов в диск, операционная система все еще выделяет блок 4 096 байтов. Таким образом, технически файл здесь пуст с человекочитаемой точки зрения, и все же - это содержит байты.
Мы можем создать ссылку на файл, который составит 0 байтов, но после того как мы пытаемся заполнить ее любыми данными, мы дадим ей 4 096 байтов
$> touch myFile2.txt
$> du myFile2.txt
0 myFile2.txt
Но почему каталог составляет 4 096 байтов? каталоги являются видом списков. После того как Вы создаете каталог, даже пустеете один, он содержит информацию (для заинтересованных языком программирования C, это - dirent структура, которая содержит inode число, рекордную длину, введите, и имя; поиск dirent.h). Таким образом даже при том, что каталог не может иметь файлов, он будет содержать информацию о себе.
Можно также использовать stat
:
$ touch file
$ stat --format '%F' file
regular empty file
$ echo 'a' > file
$ stat --format '%F' file
regular file
... или это:
find /dir/to/file -maxdepth 1 -name file_name -empty
Можно использовать test
с -f
и ! -s
, который возвратится 0
в случае существующего пустого регулярного файла или 1
иначе:
-f FILE
FILE exists and is a regular file
-s FILE
FILE exists and has a size greater than zero
test -f file -a ! -s file && printf 'File exists and is empty.\n'
Или использование более общего синтаксиса:
[ -f file -a ! -s file ] && printf 'File exists and is empty.\n'
$ touch empty
$ printf '\n' >non_empty
$ test -f file -a ! -s empty && printf 'File exists and is empty.\n'
File exists and is empty.
$ test -f file -a ! -s non_empty && printf 'File exists and is empty.\n'
$
Вы могли добавить функцию к ~/.bashrc
для удобства:
is_empty() { test -f file -a ! -s file && printf 'File exists and is empty.\n'; }
Или использование более общего синтаксиса:
is_empty() { [ -f file -a ! -s file ] && printf 'File exists and is empty.\n'; }
$ touch empty
$ printf '\n' >non_empty
$ is_empty empty
File exists and is empty.
$ is_empty non_empty
$