Qual arquivo primeiro é deletado primeiro ao deletar via rm -f com um padrão glob?

0

Eu tenho uma pasta com milhares de arquivos com esse padrão: YYYYMMDD_HH24MISS_4DIGITSEQUENCE .

Exemplo: 20180626_210123_0001 .

Agora, por exemplo, enquanto estou excluindo via rm -f *20180626_1* comanda seu funcionamento.

Minha pergunta é:  1. Qual arquivo está sendo excluído primeiro?  2. Está sendo escolhido aleatoriamente?  3. Se mantém alguma sequência enquanto escolhe, então qual e como decide?

    
por Leon 26.06.2018 / 17:17

2 respostas

1

Globs são expandidos pelo shell em ordem lexicográfica (na localidade atual), e a implementação rm é provável para remover os arquivos que obtém como argumentos na mesma ordem em que os obtiveram. Então, no seu caso, os arquivos seriam removidos, começando pelo mais antigo.

A classificação dos resultados da glob é exigida pelo POSIX . Em um teste rápido, pelo menos o GNU rm remove arquivos dados na linha de comando na ordem listada, e não classifica os arquivos encontrados durante a operação recursiva.

    
por 26.06.2018 / 17:26
1

O shell expande a expressão antes de executar rm e essa expansão não é específica do comando, portanto, se você fizer isso:

echo *20180626_1*

Então a primeira coisa que echos será a primeira coisa que o shell passa para rm . A ordem não é aleatória, é alfabética. Da página man bash:

After word splitting, unless the -f option has been set, bash scans each word for the characters *, ?, and [. If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of file names matching the pattern.

    
por 26.06.2018 / 17:23

Tags