Поэтому мне нужно перебрать дерево каталогов, в настоящее время я могу распечатать все файлы в каталоге, но как только это будет сделано, я должен иметь возможность перейти в подпапки исходного каталога и так далее. Моя программа распечатывает файлы и папки для начала, но мне нужно проверить каждый из них, чтобы убедиться, что это каталог, а затем ввести его. Может ли кто-нибудь дать руководство по этому вопросу?
7 ответов
help test
урожайность
test: test [expr]
[...]
-d ФАЙЛ Истина, если файл является каталогом.
[...]
Exit Status: возвращает успех, если EXPR оценивается как true; терпит неудачу, если EXPR оценивается как ложное или задан неверный аргумент.
test
может быть сокращен до [
, так что вы можете сделать
if [ -d "$file" ]; then
# do stuff
fi
test -d myFileOrFolder
но то, что вы описываете, похоже на поведение find
.
Из комментариев, введенных к некоторым ответам, я предполагаю, что вы хотите запустить какой-нибудь скрипт в каждом каталоге. В этом случае одним из возможных способов является использование команды 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
.
Надеюсь это поможет!
Используйте оператор -d
для проверки существования каталога:
if [ -d "$DIR" ]; then
...
fi
Псевдокод:
[ -d your_filename ] && it's a folder ...
find . -type d
это находит все подкаталоги
Основываясь на некоторых комментариях, я предполагаю, что вы на самом деле не хотите печатать каталоги, а обрабатываете все обычные файлы в дереве каталогов (включая все подкаталоги). Если это так, вы можете взглянуть на параметр exec
чтобы найти.
Из памяти вы, вероятно, хотите что-то вроде этого (используя команду cat
для замены вашего скрипта):
find . -type f -exec cat {} \;
В этом примере все файлы, не являющиеся каталогами во всем дереве (рекурсивно), будут обработаны командой cat
(распечатаны в стандартном формате).