Отобразить количество файлов, сгруппированных по годам

Вопрос или проблема

Я не человек, работающий с Unix / Linux, поэтому испытываю трудности с командой / скриптом, который мог бы дать мне количество файлов в каталоге и во множестве подкаталогов.

Я хочу сгенерировать вывод в формате, аналогичном ниже

Год Каталог Подкаталог (если есть) Количество (не включайте количество дочерних каталогов)

Например:

Год  Каталог  Подкаталог (если есть)  Количество
2021 root -                     1000
2021 root root/child1            100
2021 root root/child1/subchild1   10
2021 root root/child1/subchild1/{и так далее}
2022 root -                       50
2022 root root/child1             10
2022 root root/child1/subchild1   1
2022 root root/child1/subchild1/{и так далее}
и так далее...

Любая помощь будет очень полезной.

Редактировать:

  1. Не будет более 2-3 подкаталогов, но можно ограничиться максимум 3.
  2. Год будет годом создания файла.
  3. Количество необходимо только для файлов внутри каталога.
  4. Исключить ссылки или скрытые файлы.

Это коробка с Linux, работающая на Red Hat v7.9, если это поможет

Вы можете сделать это так, используя функцию globstar в bash для рекурсии с помощью **:

#!/bin/bash

shopt -s globstar

{
    printf '%s\n' 'Год  Каталог  Подкаталог  Количество'
    {
        for dir in **/*/; do
            (
                cd "$dir"
                echo "$(
                    stat -c '%y' "$PWD" | 
                    cut -d'-' -f1) ${PWD}: количество: $(
                        find -maxdepth 1 -type f ! -name '.*' |
                        wc -l
                )"
            )
        done
    } | perl -lane '
            @{ $main::v->{$F[0]} } = @F[1..$#F];
            END{print map { "$_ @{ $main::v->{$_} }\n" } sort keys %$main::v}'
} | column -t

Ответ или решение

Чтобы получить количество файлов в директории и её подкаталогах, сгруппировав результаты по годам создания файлов, можно использовать Bash-скрипт на Linux. В данном ответе я представлю пошаговый процесс, который поможет вам добиться желаемого результата. Мы будем использовать команду find для поиска файлов, а также stat для получения даты создания файлов.

Шаг 1: Подготовка скрипта

Создайте новый текстовый файл и откройте его для редактирования. Мы начнем с написания основного скрипта.

#!/bin/bash

shopt -s globstar

printf '%s\n' 'Year Dir  Sub-Dir Count'

# Цикл по всем директориям и поддиректориям
for dir in **/*/; do
    # Переход в текущую директорию
    (
        cd "$dir" || continue

        # Получаем год создания с помощью команды 'stat'
        year=$(stat -c '%y' . | cut -d'-' -f1)

        # Считаем количество файлов в текущей директории (не включая подкаталоги и скрытые файлы)
        count=$(find . -maxdepth 1 -type f ! -name '.*' | wc -l)

        # Получаем путь текущей директории
        path=$(realpath --relative-to="$1" "$dir")

        # Выводим результат
        echo "$year ${1:-.} $path $count"
    )
done | sort

Шаг 2: Объяснение кода

  1. Настройка globstar: Мы включаем globstar с помощью shopt -s globstar, что позволяет использовать ** для рекурсивного поиска в подкаталогах.

  2. Цикл по директориям: Мы используем цикл for для итерации по всем директориям и поддиректориям. Результат будет включать как корневую директорию, так и её подкаталоги.

  3. Переход в директорию: Используем cd "$dir" для входа в текущую директорию. Если вход не удался, мы пропускаем итерацию с помощью || continue.

  4. Получение года создания файла: Команда stat -c '%y' . возвращает дату создания директории. Мы используем cut для извлечения года.

  5. Подсчет файлов: find . -maxdepth 1 -type f ! -name '.*' ищет только файлы, исключая скрытые, и возвращает количество файлов в текущей директории, используя wc -l.

  6. Вывод результата: Скрипт форматирует вывод в запрашиваемом формате.

Шаг 3: Запуск скрипта

После написания скрипта сохраните файл. Дайте ему разрешение на выполнение:

chmod +x ваш_скрипт.sh

Запустите его в директории, которую хотите обработать:

./ваш_скрипт.sh /путь/к/вашей/директории

Вывод

С помощью вышеописанного решения вы получите организованный список файлов, сгруппированных по годам, с указанием директорий и количества файлов. Такой результат будет полезен для анализа структуры файловой системы и для отчетности. Перед использованием скрипта рекомендую протестировать его на небольшой выборке данных, чтобы убедиться, что вывод соответствует вашим ожиданиям.

Оцените материал
Добавить комментарий

Капча загружается...