Comando Linux para retornar todos os arquivos que iniciam com TEMP, mas não terminam com dois dígitos

6

Qual é o comando do Linux para retornar todos os arquivos que iniciam com TEMP, mas não terminam com dois dígitos?

Acho que deveria ser algo assim:

ls -l TEMP*[!0-9][!0-9]

mas os resultados da minha pesquisa estão omitindo alguns resultados.

    
por user70573 05.06.2014 / 02:23

3 respostas

8

Com o GNU e os BSDs mais modernos, find :

find . -maxdepth 1 -type f -name 'TEMP*' ! -name "*[0-9][0-9]"

POSIXly:

find . ! -name . -prune  -type f -name 'TEMP*' ! -name "*[0-9][0-9]"

ksh ou bash -O extglob ou zsh -o kshglob :

ls -ld TEMP*@([^0-9]?|?[^0-9]) [T]EMP TEMP?
    
por 05.06.2014 / 02:36
3

Se o seu shell for ksh ou bash com a opção extglob ( shopt -s extglob para ativar), então

ls -d TEMP!(*[0-9][0-9])

deve funcionar. Se você quiser pesquisar recursivamente e globstar estiver habilitado ( set -o globstar in ksh93 , shopt -s globstar in bash ), então você deve ser capaz de fazer isso como

ls -d -- **/TEMP!(*[0-9][0-9])

(observe que ele não atravessa diretórios ocultos por padrão)

Por exemplo, se

$ ls -d -- **/TEMP*
TEMP12345  TEMP123ab  TEMPabc12  TEMPabcde  tests/TEMP12345  tests/TEMP123ab  tests/TEMPabc12  tests/TEMPabcde

então

$ ls -d -- **/TEMP!(*[0-9][0-9])
TEMP123ab  TEMPabcde  tests/TEMP123ab  tests/TEMPabcde

O equivalente em zsh é:

setopt extendedglob
ls -d -- **/TEMP^*[0-9][0-9]
    
por 05.06.2014 / 02:38
0

Sua idéia é boa: procurando por tudo começando com temp e não terminando com dois números. Infelizmente, acho que você cometeu um erro de sintaxe. Você deveria substituir! por ^. Então agora você está procurando por arquivos como: temp * 99 e temp * !!.

    
por 05.06.2014 / 13:32