Вы получите файлы в порядке ASCII. Это означает, что vvchr10*
предшествует vvchr2*
. Я понимаю, что вы не можете переименовать ваши файлы (мой мозг биоинформатика говорит мне, что они содержат данные о хромосоме, а мы просто не называем хромосому 1 "chr01"), поэтому вот другое решение (не использующее sort -V
, которое я не могу найти в любой операционной системе, которую я использую):
ls *.fas | sed 's/^\([^0-9]*\)\([0-9]*\)/\1 \2/' | sort -k2,2n | tr -d ' ' |
while read filename; do
# do work with $filename
done
Это немного запутанно и не будет работать с именами файлов, содержащими пробелы.
Другое решение. Предположим, что вместо этого мы хотим перебирать файлы в порядке размеров, что может быть более подходящим для некоторых задач биоинформатики:
du *.fas | sort -k2,2n |
while read filesize filename; do
# do work with $filename
done
Чтобы отменить сортировку, просто добавьте r
после -k2,2n
(чтобы получить -k2,2nr
).