Путь ко всем подкаталогам, которые не содержат файлов

#shell #directory #path

#оболочка #каталог #путь

Вопрос:

Я знаю, что мой вопрос покажется многим из вас глупым, но может ли кто-нибудь помочь мне с темой колледжа? Вот инструкция: создайте сценарий оболочки, который получает каталог D в качестве аргумента. Скрипт будет рекурсивно проходить через каталог D и будет искать и отображать путь ко всем подкаталогам, которые не содержат никаких файлов (они пустые или содержат только подкаталоги). Просьба не использовать «найти», спасибо всем.

Комментарии:

1. Вы уже рассмотрели рекурсивные функции? Удачи.

2. Мы делали только while и for , но не как рекурсивно просматривать каталог и особенно как открывать папки в каталоге

3. Вы узнали, как проверить, является ли запись каталога файлом или каталогом? если if [ -f "$item" ] ; then echo "$item is a file" ; elif [ -d $item ] ; then echo "$item is a dir" ; fi ? Вам нужно будет опубликовать здесь некоторый код. Мы поможем вам исправить вашу лучшую попытку решить проблему, но мы не будем писать ее за вас. Удачи.

4. Они только научили нас обрабатывать данные из файла, извините, я не загружал код, но я действительно не знаю, как начать эту проблему.

5. Затем ваш инструктор дал вам задание, к которому они не дали вам никакой подготовки. Вы должны обсудить это с ними. ИЛИ выполните поиск здесь [bash] for loop directory и найдите некоторый код для публикации. Заставьте его работать в одном каталоге, а затем обновите свой Q. Удачи.

Ответ №1:

Сценарий может быть реализован с помощью функции рекурсии:

 #!/usr/bin/env bash

if [ $# -eq 0 ] ; then
    echo "Usage: ./recursive.sh {path}" >amp;2
    exit 0
fi

D="$1"

print_recursively() {
    for f in "$1"/*; do
        echo "$f"
        if [[ -d "$f" ]] ; then
            print_recursively "$f"
        fi
    done
}

print_recursively "$D"
 

В решении может отсутствовать некоторые детали (например, символические ссылки, необычные типы файлов и т. Д.), Но Оно дает представление о том, как можно реализовать рекурсивный обход.

Ответ №2:

Вероятно, вы искали что-то более сложное, чем это…

find "$D" -type d -empty

Комментарии:

1. Смотрите последнее предложение вопроса.