Один подход заключается в петле и поместить явный продолжать в каталогах:
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)
для упрощения e случаях вам действительно не нужно использовать третий дескриптор. – jm666
@ jm666, конечно, но я не хочу показывать что-то, что будет хрупким, если его использовать повторно в более интересных сценариях. Лучше научить людей делать что-то правильно, нежели люди привыкли писать код таким образом, что это будет ошибкой, если обстоятельства будут отличаться. –
Спасибо, Чарлз. Вариант 3, используя find, кажется самым загадочным. Не могли бы вы рассказать мне о выборе между вариантами 1 и 2? – Ray