скрипт bash: цикл по каталогу - PullRequest
2 голосов
/ 17 ноября 2010

В настоящее время я пытаюсь взять каталог в качестве параметра, а затем перечислить содержимое каталога. Если в этом каталоге есть другой каталог, то делайте то же самое рекурсивно.

Текущий код:

#! /bin/bash

function gothrudir {
for f in $1
do 
if [ -n "$( file $f|grep "directory" )" ] ;
then
gothrudir $f
else
ls $f
fi
done
]
gothrudir $1
gothrudir `pwd`

Я не уверен, как передать все файлы в директории, которые будут зациклены. В настоящее время это просто бесконечный цикл, потому что он только исследует данный каталог, видит его каталог, а затем вызывает сам себя.

Спасибо за вашу помощь!

Ответы [ 4 ]

2 голосов
/ 17 ноября 2010

Как уже отмечали другие, find - гораздо лучший способ сделать это. Но только для полноты, вот как исправить вашу рекурсивную функцию bash. Я изменил три вещи (плюс некоторые незначительные изменения форматирования): используйте "$1"/*, чтобы получить список файлов в $ 1, двойные кавычки всех путей (они иногда содержат пробелы) и используйте [ -d ... ] вместо вызова file чтобы увидеть, является ли что-то каталогом.

function gothrudir {
    for f in "$1"/*; do
        if [ -d "$f" ]; then
            gothrudir "$f"
        else
            ls "$f"
        fi
    done
}

gothrudir "$1"
1 голос
/ 17 ноября 2010
function fnd {

    find $1 -type d -exec ls -d {} \; 

}
0 голосов
/ 17 ноября 2010

'найти. -type d 'делает это

0 голосов
/ 17 ноября 2010

Есть ли причина, по которой вы делаете это, а не используете find?

Например: find -ls

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