2015-08-14 5 views

ответ

3

Один подход заключается в петле и поместить явный продолжать в каталогах:

for file in /some-dir/*; do 
    [[ -d $file ]] && continue 
done 

Другой способ заключается в использовании extglob синтаксис (этот пример тестировался на баш 4.x):

shopt -s extglob 
for file in some-dir/!(*/); do 
    echo "Found $file" 
done 

Другим является использование find - см. Ниже пример, как это сделать:

# Using file descriptor 3 so stdin is unmodified 
# ...choose another FD number if you like. 
while IFS= read -r -d '' -u 3 filename; do 
    : "$filename" 
done 3< <(find . -maxdepth 1 -type f -print0) 
+0

для упрощения e случаях вам действительно не нужно использовать третий дескриптор. – jm666

+0

@ jm666, конечно, но я не хочу показывать что-то, что будет хрупким, если его использовать повторно в более интересных сценариях. Лучше научить людей делать что-то правильно, нежели люди привыкли писать код таким образом, что это будет ошибкой, если обстоятельства будут отличаться. –

+0

Спасибо, Чарлз. Вариант 3, используя find, кажется самым загадочным. Не могли бы вы рассказать мне о выборе между вариантами 1 и 2? – Ray

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