Bash найти каталоги - PullRequest
24 голосов
/ 22 июля 2011

Я новичок в скриптах bash. Я просто пытаюсь создать скрипт, который будет искать в каталоге и отображать имена всех подкаталогов.

Основой для кода является следующий скрипт (назовите его isitadirectory.sh):

     #!/bin/bash

     if test -d $1
         then
                echo "$1"
     fi

так в командной строке, если я наберу

       $bash isitadirectory.sh somefilename 

Это будет эхо somefilename, если это каталог.

Но я хочу найти все файлы в родительском каталоге.

Итак, я пытаюсь найти способ сделать что-то вроде

           ls -l|isitadirectory.sh

Но, конечно, приведенная выше команда не работает. Может кто-нибудь объяснить хороший сценарий для этого?

Ответы [ 8 ]

55 голосов
/ 22 июля 2011
find . -mindepth 1 -maxdepth 1 -type d
32 голосов
/ 29 октября 2014

В конкретном случае вы ищете 1) каталог, который вы знаете 2) имя, почему бы не попробовать с этим:

find . -name "octave" -type d
8 голосов
/ 22 июля 2011

попробуйте использовать

find $path -type d?

для текущего каталога

find . -type d

4 голосов
/ 22 июля 2011

Следующие строки могут дать вам представление ... что вы просите

#!/bin/bash

for FILE in `ls -l`
do
    if test -d $FILE
    then
      echo "$FILE is a subdirectory..."
    fi
done

Вы можете заглянуть в цикл bash 'for'.

3 голосов
/ 22 июля 2011

Здесь уже много решений, поэтому только для удовольствия:

 file ./**/* | grep directory | sed 's/:.*//'
2 голосов
/ 13 ноября 2018
find ./path/to/directory -iname "test" -type d

Я нашел это очень полезным для поиска имен каталогов, используя -iname для поиска без учета регистра. Где «тест» - это поисковый термин.

0 голосов
/ 22 июля 2011

Не уверен ... но, возможно, вам стоит взглянуть на команду дерева. http://linux.die.net/man/1/tree

tree -L 2 -fi
0 голосов
/ 22 июля 2011

Вы должны использовать:

ls -lR | isitadirectory.sh

(параметр -R - рекурсия)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...