3

Поэтому мне нужно перебрать дерево каталогов, в настоящее время я могу распечатать все файлы в каталоге, но как только это будет сделано, я должен иметь возможность перейти в подпапки исходного каталога и так далее. Моя программа распечатывает файлы и папки для начала, но мне нужно проверить каждый из них, чтобы убедиться, что это каталог, а затем ввести его. Может ли кто-нибудь дать руководство по этому вопросу?

7 ответов7

12

help test урожайность

test: test [expr]

[...]

-d ФАЙЛ Истина, если файл является каталогом.

[...]

Exit Status: возвращает успех, если EXPR оценивается как true; терпит неудачу, если EXPR оценивается как ложное или задан неверный аргумент.

test может быть сокращен до [ , так что вы можете сделать

if [ -d "$file" ]; then
    # do stuff
fi
2
test -d myFileOrFolder

но то, что вы описываете, похоже на поведение find .

1

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

find ./ -type d -exec sh -c "cd {} && <your_script_with_absolute_path>" \;

Например, в текущем каталоге есть скрипт test.sh и вы хотите выполнить его в каждом из подкаталогов текущего каталога.

find ./ -type d -exec sh -c "cd {} && `pwd`/test.sh" \;

Для команды find -type d попросит найти все каталоги в пути ./ переданные в качестве первого аргумента. -exec будет выполнять команду для каждой такой находки, в этом случае sh -c которая создает оболочку и выполняет команду с кавычками, {} указывает аргумент, найденный командой find .
Надеюсь это поможет!

0

Используйте оператор -d для проверки существования каталога:

if [ -d "$DIR" ]; then
    ...
fi
0

Псевдокод:

[ -d your_filename ] && it's a folder ...
0
find . -type d

это находит все подкаталоги

0

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

Из памяти вы, вероятно, хотите что-то вроде этого (используя команду cat для замены вашего скрипта):

find . -type f -exec cat {} \;

В этом примере все файлы, не являющиеся каталогами во всем дереве (рекурсивно), будут обработаны командой cat (распечатаны в стандартном формате).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .