Поскольку вы только учитесь, вот несколько советов по вашим вопросам, а не полный сценарий.
Существует несколько способов получить размер файла; в системах Linux отличным выбором будет утилитаstat
, поскольку вы можете напрямую запрашивать у нее байты:
bytes=$(stat -c %s -- "$f")
другой вариант — утилита wc:
bytes=$(wc -c < "$f")
Обратите внимание, что вы хотите перенаправить файл в wc
, а не инстинктивно wc -c "$f"
, так как последняя форма также выводит имя файла, а первая (, поскольку она не знает имени файла. ), просто выводит количество байтов.
Чтобы проверить, является ли данный файл обычным файлом или каталогом, обычно используется:
тест.
if [ -d "$f" ]
then
echo It is a directory
else
echo It is not a directory
fi
Для подсчета количества (не -скрытых )файлов в каталоге у вас есть несколько вариантов:
использовать указанную в POSIX -set
утилиту:
set -- /path/to/dir/*; echo "$#"
используйте массив (, так как вы пометили bash):
files=( /path/to/dir/* )
echo "There are ${#files[@]} files in there"
Они будут подсчитывать количество «файлов» (файлов и каталогов )в данном каталоге. Поведение по умолчанию в большинстве оболочек — пропустить точечные -файлы (например..bashrc
)при расширении шара *
; вы можете настроить это с помощью bash, запустив shopt -s dotglob
или shopt -u dotglob
, и проверить это с помощью shopt dotglob
.
touch /path_to_the_systems_directory/test1
Это должно работать, если у вас есть необходимые привилегии для записи в каталог