2015-03-09 5 views
0

Я хочу цикл рекурсивно через каждый файл и каталог ниже в указанном пути и эха этого файла/каталог в владельце и имени.Портативное решение перебрать каталог рекурсивно в Баше 3.2

Я нашел это question, чтобы быть хорошей ссылкой, но я хотел бы знать, есть ли bash 3.2 портативное и более простое решение проблемы. Решение без использования find было бы превосходным.

Я также обнаружил, что есть shopt -s globstar, но я не знаю, переносится оно или нет.

Если вы посмотрите на мой скрипт, вы увидите, что log_owners просто петли над [email protected], так что, возможно, проблема в моем шаблоне glob. Я думал, что log_owners $root/** будет проходить через все, но это не так.

# OSX check. 
darwin() { 
    [ $(uname) = "Darwin" ] 
} 

# Get file/directory's owner. 
owner() { 
    if [ -n "$1" ]; then 
    if darwin; then 
     stat -f "%Su" "$1" 
    else 
     stat -c "%U" "$1" 
    fi 
    fi 
} 

log_owners() { 
    for file in [email protected]; do 
    echo $(owner "$file")"\t$file" 
    done 
} 

Я использую sh/bash 3.2.

ответ

0

Ну, я просто понял, довольно очевидный (с использованием рекурсии):

loop() { 
    for file in $1/**; do >/dev/null 
    if [ -d "$file" ]; then 
     loop "$file" 
    elif [ -e "$file" ]; then 
     echo $(owner "$file")"\t$file" 
    fi 
    done 
} 

И кажется работать нормально.

+0

попробуйте запустить 'time find/base/dir -ls' vs' time loop/base/dir' или достаточно крупную структуру dir. Информация hh: mm: ss в конце поможет вам решить, является ли это хорошим подходом или нет. Кроме того, вы не определили портативность. Портативный, как в совместимом с POSIX, или как совместимый с/bin/sh, или, как вы, кажется, говорите портативный = «старейшая возможная версия bash». ;-) Удачи! – shellter

+0

Я вижу, я думаю, что имел в виду '/ bin/sh' совместимый. Я думаю, что рекурсивные функции, хотя и простые, очень медленные. –

+0

Как бы то ни было, он не совместим с/bin/sh. Синтаксис '$()', синтаксис globstar, команда 'owner' не являются/bin/sh. Какие операционные системы/машины будут работать? –

 Смежные вопросы

  • Нет связанных вопросов^_^