Советы по работе с Shell: Обнаружение пустых каталогов

Советы по работе с Shell: Обнаружение пустых каталогов

01.05.2024
Автор: HostZealot Team
2 мин.
60

Основные аспекты

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

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

1. Использование команды find

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

1.1. Параметр -empty

В соответствии со стандартными характеристиками этой команды, опция -empty проверяет каталоги и файлы. Чтобы что-то изменить и выбрать только каталоги, используйте следующее:

  $ find . -type d -empty

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

1.2. Команда с оператором if

Здесь мы покажем вам два варианта использования оператора if вместе с командой test. Первый подход подсчитывает файлы в определенной директории и выглядит следующим образом:

if [ "$(find projects -mindepth 1 -maxdepth 1 | wc -l)" -eq 0 ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

В этом сценарии -eq 0 работает, сравнивая, равно ли количество элементов нулю, wc -l подсчитывает элементы в каталоге. -mindepth 1 - эта часть гарантирует, что в поиске find не будет каталога, а -maxdepth 1 - означает, что поиск каталогов/файлов будет производиться в определенном каталоге.

Другой вариант выглядит следующим образом:

if [ -z "$(find projects -mindepth 1 -maxdepth 1)" ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

В этом скрипте параметр -z означает true в случае пустого вывода. Это означает, что если проект действительно пуст, то вы получите уведомление с фазой " Empty Directory".  

2. Применение команды ls

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

$ ls projects

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

2.1. Применение команды test с оператором if

Чтобы просмотреть содержимое каталога, необходимо использовать ls вместе с другой опцией, например, так:

$ if [ -z "$(ls -A projects)" ]; then echo "Empty Directory "; else echo "Directory isn’t empty"; fi

В этой строке A projects, объединенный с ls, используется для отображения содержимого всех каталогов, кроме текущего и родительского.  

Кроме того, можно подсчитать количество элементов:

$ if [ "$(ls -A projects | wc -l)" -eq 0 ]; then echo "Empty Directory"; else echo "Directory isn’t empty"; fi

3. Опция Shopt

Shopt - это команда, которая позволяет снимать и устанавливать опции оболочки. С помощью аргумента -s можно установить nullglob. Такая опция отвечает за то, как shell работает с шаблонами, не имеющими совпадающих файлов. Например, скрипт с nullglob, не имеющий подходящего файла, расширяется до пустого списка, в то время как без него шаблон представляет собой просто литеральную строку.

# Path of directory
directory_path="/home/samuel/Desktop/projects"
 
# Enable the nullglob
shopt -s nullglob
 
# Whether is it an empty directory?
files=( "$directory_path"/* )
if [ ${#files[@]} -eq 0 ]; then
echo "Empty Directory"
else
echo "Directory isn’t empty"
fi

Используя этот сценарий Bash, вы получите вывод “Empty Directory” в случае, если он пуст или содержит только скрытые типы файлов.

4. В заключение

Мы решили поделиться своим практическим опытом и рассмотреть различные подходы, которые можно использовать для определения того, пуст каталог или нет. Основными подходами являются использование команд ls и find.

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

# Как сделать Поделиться:
Статьи по Теме