Ordem de execução dos argumentos do comando de toque

0

Eu tenho uma lista de arquivos separados por espaço e desejo usar o comando touch para atualizar seus timestamps nessa ordem. Mas quando eu forneço os nomes dos arquivos como argumentos, os timestamps são atualizados em uma ordem diferente.

touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt 

Depois de executar o comando acima e executar ls -t (classificação por tempo modificado), recebo o seguinte:

1.txt 10.txt 11.txt 12.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt

O fornecimento de argumentos para comandos não garante a ordem de execução? Se não, como posso atualizar os registros de data e hora desses arquivos nessa ordem específica?

    
por spencer.sm 08.08.2017 / 18:45

2 respostas

5

Sem tempo especificado, touch altera os registros de data e hora de todos os seus argumentos para a hora atual no momento em que cada arquivo é tocado, o que deve produzir um registro de data e hora diferente para cada arquivo, mas em muitos casos timestamp para todos os seus argumentos; Você pode verificar isso executando stat em todos os arquivos tocados. Eles são processados na ordem especificada na linha de comando.

Para obter o resultado desejado, você precisa fazer um loop e touch de cada arquivo individualmente, com algum atraso:

for file in {1..12}.txt; do touch $file; sleep 0.1; done

(com mais ou menos atraso, dependendo da resolução do registro de data e hora do sistema de arquivos subjacente).

Observe que ls -t lista arquivos classificados por timestamp decrescente; para ver os tempos crescentes, você precisa usar ls -rt .

    
por 08.08.2017 / 18:52
0

Talvez seja um pouco complicado, mas se estiver em um script, usaria um loop for.

ex:

for x in 1.txt 2.txt 3.txt 4.txt [as many as you want here]; do touch $x; done

Isso resultaria na criação deles sempre na ordem indicada. Você pode mudar os nomes para qualquer coisa e não seguir qualquer tipo de padrão. Se você estiver criando arquivos com o mesmo nome ou um padrão numérico como em seu exemplo, eu faria isso:

for x in $(seq 1 10); do touch $x.txt; done
    
por 08.08.2017 / 18:58