Если у меня есть каталог, полный файлов и подкаталогов. Каков наилучший способ перечислить только обычные файлы, которые располагаются в алфавитном порядке перед заданной строкой?
На данный момент лучшее, что я могу сделать с помощью bash, это следующее:
for x in `find . -maxdepth 1 -type f | sort`
do
if [[ "$x" > './reference' ]]
then
break
fi
echo $x
done
Я чувствую, что есть более краткий способ сделать это, но я не уверен, что это такое. Любые идеи?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'
С
sed
этим более кратко:Что означает (после сортировки) удаление контрольной строки (или больше) и всех строк, следующих за последней строкой.
Команда sed 'd' используется здесь с диапазоном адресов, где '/^./reference/' - начало, а '$' - конец диапазона. (И «$» в качестве адреса означает последнюю строку.)
источник
Обязательный zsh-ответ с использованием
.
спецификатора glob для выбора только обычных файлов иe
дальнейшего выбора между совпадениями:источник
например.
script-name "$HOME" "reference"
...find
не всегда выводит ведущий./
, как в случаеfind bin
, илиfind /tmp
. Так что, если вам нужны только имена файлов, это работает.обновление: добавлен tolower () для сравнения без учета регистра, что приводит к алфавитному сопоставлению, указанному в вопросе ...
Просто отправьте трубку
sort
послеawk
, если вам это нужно отсортировать.источник
$0 < ref
работала, но поскольку в выводе find нет пробелов, поле $ 2 не существует. Я что-то пропустил?