Se eu tiver um diretório cheio de arquivos e subdiretórios. Qual é a melhor maneira de listar apenas os arquivos regulares que caem em ordem alfabética antes de uma determinada string?
Atualmente, o melhor que posso fazer usando o bash é o seguinte:
for x in `find . -maxdepth 1 -type f | sort`
do
if [[ "$x" > './reference' ]]
then
break
fi
echo $x
done
Sinto que há uma maneira mais concisa de fazer isso, mas não tenho certeza do que é. Alguma ideia?
awk '$0 >= "'"${FROM}"'" && $0 <= "'"${TILL}"'"'
Com
sed
isso é mais conciso:O que significa (após a classificação) excluir a linha de referência (ou superior) e todas as linhas após a última linha.
O comando sed 'd' é usado aqui com um intervalo de endereços, onde '/^./reference/' é o início e '$' é o fim do intervalo. (E '$' como endereço significa a última linha.)
fonte
Resposta obrigatória ao zsh, usando o
.
qualificador glob para selecionar apenas arquivos regulares ee
para selecionar ainda mais entre correspondências:fonte
por exemplo.
script-name "$HOME" "reference"
...find
nem sempre gera o líder./
, como no caso defind bin
, oufind /tmp
. Portanto, se você deseja apenas os nomes de base do arquivo, isso funciona.update: Adicionado tolower () para permitir uma comparação sem distinção entre maiúsculas e minúsculas, que produz o agrupamento alfabético mencionado na pergunta ...
Basta canalizá-lo para
sort
depoisawk
, se precisar.fonte
$0 < ref
e isso funciona, mas como não há espaços na saída de localização, o campo $ 2 não existe. Estou esquecendo de algo?