Obtenha a pasta com o maior número no final do nome no Linux e OS X

0

Eu fiz essa pergunta ontem com o Linux, mas percebi que precisava trabalhar no Linux e no OS X. Link para a pergunta anterior: Obtenha a pasta com o maior número no final do nome no Linux .

Eu tenho algumas pastas r1, r2, r3, etc. e quero obter o nome da pasta com o maior número no final. Como obtenho o nome?

A solução ls -v parece promissora, mas eu quero excluir todas as pastas que não seguem o padrão r [0-9] *

    
por Random255 22.04.2011 / 22:33

3 respostas

2

Como você restringe os nomes de arquivos dessa maneira, você pode usar o seguinte:

$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
  • Listar arquivos
  • use apenas aqueles cujos nomes correspondem exatamente a r[0-9]+ , ou seja, r seguido por qualquer sequência de dígitos
  • remover o primeiro caractere, ou seja, o r , deixando apenas o número
  • Classifique os de acordo com o valor numérico
  • obtenha o último valor (maior)
  • prefixar um r

Exemplo:

$ ls
bar baz foo qux r14 r23 r36 r4 r41 r6 r9 rar raz roo
$ ls | grep '^r[0-9]\+$' | cut -c2- | sort -n | tail -n1 | sed 's|^|r|'
r41
    
por 23.04.2011 / 09:37
1

Você sempre pode instalar a versão mais recente de GNU coreutils para ter a opção --version-sort . Dois passos (demora um ou dois minutos):

1) Instale o Homebrew

Uma maneira fácil seria instalar o Homebrew , que é uma espécie de gerenciador de pacotes para o OS X e ajuda você a instalar facilmente binários:

ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

Para obter a versão mais recente do sort , instale o GNU Coreutils:

brew install coreutils

2) Em seguida, use gsort

Agora você terá uma versão sort com mais recursos. Ele estará disponível em gsort . Agora é só executar o comando da sua outra pergunta, mas com gsort .

printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1

Resultados

Acabei de testar isso em 10.6, funciona bem:

charon:Desktop user$ mkdir r1 r2 r3
charon:Desktop user$ printf '%s\n' r[0-9]* | gsort --version-sort | tail -n 1
r3
    
por 22.04.2011 / 23:39
0

Parece que o seguinte deve funcionar ls | grep r.*[0-9] | tail -n 1 . A única estipulação é que, para que este comando mostre o nome do arquivo com o número mais longo, os diretórios 1-9 devem ter um prefixo 0.

Por exemplo, se você tiver r1, r2, r3, r1287364763874 e executar esse comando, você receberá r3 como a saída. Mas se os diretórios inferiores forem rotulados como r01, r02, r03, r18646483, o resultado do comando será r18646483.

Espero que ajude.

Testado no Mac OS 10.5

    
por 22.04.2011 / 23:51