Введите дочерний каталог и перечислите его подкаталоги в скрипте bash

Я только начинаю изучать bash-скрипт и у меня есть вопрос, на который я не могу найти ответ. В настоящее время я нахожусь в каталоге с именем lab2. Внутри этого каталога у меня есть еще один каталог "Students", который содержит каталоги, названные в честь каждого студента. Как ~/lab2/ Students / Johndoe. Так что внутри учеников много каталогов. Мой сценарий находится в каталоге lab2, и мне нужно написать сценарий для распечатки имен каталогов внутри каталога студентов (и, конечно, мне нужно использовать относительные пути).... Как мне это сделать? Я попробовал несколько вещей, одна из которых

$MYDIR="$PWD/students"

DIRS=`ls -l . | egrep '^d' | awk '{print $8}'`

for DIR in $DIRS    
do    
    echo  ${DIR}    
done

но это не сработало.... спасибо!

3 ответа

Решение
$MYDIR="$PWD/students"

но это не сработало...

Это неудивительно - правильный синтаксис

MYDIR="$PWD/students"

(без ведущих $).

Проверьте, помогает ли следующее:

find ~/lab2/students -type d -maxdepth 1

И в случае, если вы хотите только имена каталогов (имена студентов):

find ~/lab2/students -maxdepth 1 -type d  | awk -F/ '{print $NF}'

Пожалуйста, прочитайте справочную страницу find, это очень поможет.

awk -F/ '{print $NF}' is filtering the last field.

И если вы хотите что-то с этими именами каталогов в вашем bash-скрипте, вы можете сделать что-то вроде:

#!/bin/bash

for file in $(find ~/lab2/students -maxdepth 1 -type d) #or you can use the awk one here
do

echo $file
#your stuff here

done

Развивая ответ @Jord, вы можете использовать find с некоторыми опциями для получения очень тонкого контроля над выводом:

  • -mindepth а также -maxdepth контролировать глубину рекурсии (которая по умолчанию равна 0).
  • -type d перечисляет только каталоги.
  • -printf %f печатает имя каталога (или файл, или символическую ссылку и т. д.) без ведущих каталогов.

man find имеет больше информации, и info --raw-escapes --subnodes find | less --raw-control-chars имеет полную информацию.

Другие вопросы по тегам