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

watch 51s
views 2

14:03, 01.05.2024

Содержание статьи
arrow

  • Основные аспекты
  • 1. Использование команды find
  • 1.1. Параметр -empty
  • 1.2. Команда с оператором if
  • 2. Применение команды ls
  • 2.1. Применение команды test с оператором if
  • 3. Опция Shopt
  • 4. В заключение

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

Администрирование системы 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. Надеемся, что наши инструкции окажутся полезными для вас!

Поделиться

Была ли эта статья полезной для вас?

Популярные предложения VPS

-9.6%

CPU
CPU
8 Xeon Cores
RAM
RAM
32 GB
Space
Space
200 GB SSD
Bandwidth
Bandwidth
12 TB
wKVM-SSD 32768 Metered Windows

156

При оплате за год

-5.6%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
60 GB HDD
Bandwidth
Bandwidth
Unlimited
wKVM-HDD 2048 Windows

13.7

При оплате за год

-20.2%

CPU
CPU
1 Xeon Core
RAM
RAM
1 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 1024 HK Windows

19

При оплате за год

-24.4%

CPU
CPU
2 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 1024 HK Linux

13

При оплате за год

-10%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 4096 Linux

16.45

При оплате за год

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-KVM-SSD 8192 Linux

115.5

При оплате за год

-26.7%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
1 TB
KVM-SSD 1024 Metered Linux

10

При оплате за год

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
60 GB HDD
Bandwidth
Bandwidth
Unlimited
KVM-HDD 2048 Linux

7.7

При оплате за год

-4.5%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB HDD
Bandwidth
Bandwidth
300 Gb
wKVM-HDD HK 4096 Windows

16.83

При оплате за год

-10%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 512 Linux

5.2

При оплате за год

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.