Сценарий Bash, который считает файлы с помощью wc, но заставляет его завершиться, если количество не соответствует ожидаемому - PullRequest
0 голосов
/ 25 октября 2019

У меня следующая структура папок:

files
├── 0
│   ├── textfile1.txt
│   ├── textfile2.txt
files
├── 1
│   ├── textfile1.txt
│   ├── textfile2.txt
files
├── 2
│   ├── textfile1.txt
│   ├── textfile2.txt

и для подсчета текстовых файлов в каждой папке я придумал следующий сценарий:

#!/usr/bin/env bash

total=2
for (( i=0; i <= $total; ++i ))
do
    count=$i
    if (( ${#count}  < 2 ))
    then
       count="$count"
    fi

    echo "subfolder: $count"
    ls files/$count/ | wc -l
done

Когда я запускаюЭтот скрипт, например "./script.sh", будет подсчитывать количество файлов в каждой папке и печатать следующую подпапку:

: 0

2

подпапка: 1

2

подпапка: 2

2

Мой вопрос: как сделатьЯ изменяю этот скрипт, чтобы он завершался с ошибкой, если папка содержит менее 2 файлов. Если он содержит ровно 2, то это хорошо ... если он содержит 1 или меньше, то он должен выдать ошибку и выйти, в противном случае он должен вернуть все файлы в порядке и выйти с кодом 0.

1 Ответ

0 голосов
/ 25 октября 2019

Я бы сделал:

for dir in */; do                   # iterate over the directories
    files=( "$dir"/* )              # array of files in that directory
    if (( ${#files[@]} < 2 )); then
        echo "Error: directory $dir has < 2 files" >&2
        exit 1
    fi
done

Если ваша иерархия каталогов больше похожа на то, что вы показываете, то вы можете захотеть:

for dir in */*/; do

Это зависит от текущего рабочего каталога вашего скрипта.

...