Para o diretório mais baixo de cada diretório, você precisará classificar a saída em cada diretório.
/ 100/2001
/ 100/2003 -
/ 101/2001
/ 101/2004
/ 102/2000
/ 102/2003
/ 102/2005
o comando ls faz isso automaticamente, mas faz a classificação alfanumérica por padrão. Se todos os subdiretórios tiverem nomes com o mesmo tamanho, isso será aceitável.
SUBDIRLIST=10?
for SUBDIR in $SUBDIRLIST
do
ls -d $SUBDIR/???? | head -1
done
Como isso funciona:
for SUBDIR in $SUBDIRLIST
Procure em cada diretório da lista. A lista é definida na linha anterior. Eu escolhi usar 10? para selecionar entradas com três caracteres e começar com 10, mas você pode ter dito SUBDIR=*
se quiser usar tudo.
ls -d $SUBDIR/????
-
Comando
ls
para exibir entradas classificadas do conteúdo de $ SUBDIR - O
????
seleciona apenas entradas com quatro caracteres. Você pode querer escolher * se não se importa, ou se você tem outros diretórios que devem ser ignorados, limitar ainda mais usando uma expressão como20??
| head -1
- Passe a lista através do "comando de cabeça"
- Head exibirá apenas a primeira linha e descartará o restante.
Você precisa de uma solução um pouco diferente se todos os nomes de diretório não forem do mesmo tamanho, por exemplo:% SUBDIRLIST=10?
for SUBDIR in $SUBDIRLIST
do
find $SUBDIR -depth 1 | sort -n | head -1
done
Nesse caso, usamos find porque ls classificaria as entradas, mas isso seria errado, por isso é redundante. Find não classifica as entradas (seja padrão).
sort -n
, em seguida, classifica os itens encontrados, em que -n
certifica-se de que eles são tratados como números, de modo que 20 são anteriores a 100.
Mais uma vez, head -1
descarta tudo, exceto a primeira linha.
Finalmente, a instrução SUBDIRLIST=10?
seleciona apenas os subdiretórios que começam com 10 e possuem três caracteres no nome. Você pode limitá-lo mais ou menos, dependendo das suas necessidades. Por exemplo, SUBDIRLIST=*
seleciona tudo, SUBDIRLIST=???
seleciona todas as entradas com três caracteres.