Símbolo que aparecerá primeiro na saída de 'ls'?

7

Eu quero que uma pasta chamada DELETED seja a primeira na minha saída de ls .

Existe algum símbolo que eu possa adicionar à frente que possa causar isso? Eu tentei ^ e - e nem funciona.

    
por jaynp 25.03.2014 / 21:35

2 respostas

9

^ , em ordem ASCII, segue as letras maiúsculas. - precede todas as letras e dígitos, mas segue vários outros caracteres de pontuação.

Os caracteres imprimíveis ASCII, em ordem, são:

 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
'abcdefghijklmnopqrstuvwxyz{|}~

Mas isso não necessariamente ajuda você, já que a ordem em que ls lista arquivos pode ser afetada pela localidade atual.

Você poderia iniciar o nome do arquivo com um espaço ou ! , mas isso tornaria difícil fazer referência ao arquivo sem citá-lo - e, novamente, as configurações de localidade poderiam interferir. A maioria dos outros caracteres ASCII que precedem os dígitos decimais terão problemas semelhantes.

Sua melhor aposta, supondo que você não tenha outros arquivos com caracteres estranhos em seus nomes, pode ser o início do nome do arquivo com uma string 0 s:

 000_DELETED

(Eu usei uma técnica semelhante para nomear pastas de e-mail no Thunderbird e no Outlook.)

    
por 25.03.2014 / 21:46
8

Em sistemas GNU, pelo menos na maioria dos locais diferentes de C / POSIX, há alguns caracteres que são ignorados no que diz respeito à classificação. Esse é o caso, por exemplo, de _ , . , espaço ou 0x1.

É por isso que .a , .c , __b , _d é classificado como .a , __b , .c , _d , por exemplo.

Para strings que consistem em somente desses caracteres ignorados , a ordem de classificação é definida na localidade, o ASCII SPC geralmente vem em primeiro lugar. Portanto, um caractere de espaço único seria o arquivo que classifica primeiro (mesmo antes de 0x1 (o primeiro no idioma C), . e .. ), depois dois espaços ... etc. No entanto, <SPC>DELETED classificaria < em> after DELETED , portanto, enquanto um arquivo chamado ___ seria classificado antes da maioria dos outros arquivos, colocar ___ na frente de alguma outra string não o faz classificar antes.

Entre os caracteres não ignorados, o ASCII 0 é geralmente o caractere que classifica primeiro em locais não-C.

Assim, um arquivo chamado 0 deve ser classificado antes de qualquer outro arquivo que não contenha caracteres não ignorados. Colocar o 0 em um arquivo que contém caracteres não ignorados faria com que ele fosse classificado anteriormente em locais não-C.

Portanto, um arquivo chamado $'_000_DELETED' seria classificado bem cedo na localidade C (porque 0x1 é o primeiro caractere para ser classificado primeiro) e também em outras localidades (porque todos os 0x1 e _ são ignorados, mas a 0 s são os caracteres não ignorados que são classificados primeiro).

Em locais não-C, ainda ordenaria após . ou .. .

Outra opção poderia ser escrever DELETED apenas com caracteres ignorados como " ₫€£€₮€₫" . Esses símbolos de moeda são ignorados pela classificação. O SPC também classifica bastante cedo no código do idioma C, portanto, ele deve classificar antes de . em locais C e não-C.

$ touch $'   \u20ab\u20ac\u00a3\u20ac\u20ae\u20ac\u20ab' $'' ' ' 0normal-file $'_000_DELETED'
$ ls -1a

   ₫€£€₮€₫
./
../
?
???_000_DELETED
0normal-file
$ LC_ALL=C ls -1a
?
???_000_DELETED

   ????????????????????
./
../
0normal-file
$ LC_COLLATE=C ls -1a
?
???_000_DELETED

   ₫€£€₮€₫
./
../
0normal-file
    
por 25.03.2014 / 23:36

Tags