Como declarado na página manpage , o uso principal de touch
é este :
Atualize os tempos de acesso e modificação de cada arquivo para o hora atual.
Por isso, atualiza os horários de acesso e modificação do diretório.
O que o comando 'toque' quando aplicado a um diretório?
$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
Como declarado na página manpage , o uso principal de touch
é este :
Atualize os tempos de acesso e modificação de cada arquivo para o hora atual.
Por isso, atualiza os horários de acesso e modificação do diretório.
O exemplo na parte superior não deixa claro que "toque" define a hora do diretório (a nova hora na listagem era a mesma que a original, simplesmente porque o toque era tão breve depois que o diretório foi criado ) ... sim, a definição de "ARQUIVO" na documentação inclui diretórios, então você pode usar o toque para alterar seus timestamps, MAS ...
Existem algumas situações em que você não pode alterar o registro de data e hora de um diretório (para alguns tipos de diretórios montados remotamente), mesmo que tenha permissão para fazer qualquer outra coisa. por exemplo. esta montagem NFS:
$ touch -d "2014-07-02 12:15" /public/test.dir
touch: setting times of ‘/public/test.dir’: Operation not permitted
Além disso, você pode ter problemas com algumas datas antigas que não são suportadas em alguns servidores, por exemplo:
$ mkdir /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir
Isso funciona:
$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr 1 2014 /Acer/kopies/test.dir
Isso funcionaria em um diretório local, mas fornece uma data estranha nas montagens do Samba:
$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26 60410 /Acer/kopies/test.dir
~~~~~~~~~~~~~
touch
é um programa padrão do Unix usado para alterar o acesso e timestamps de modificação. Também é usado para criar um novo arquivo vazio.A especificação única Unix (SUS) especifica que o toque deve mudar os horários de acesso, horários de modificação ou ambos, para um arquivo. O arquivo é identificado por um nome de caminho fornecido como um único argumento. Isso também especifica que, se o arquivo identificado não existir, o arquivo será criado e os tempos de acesso e modificação são definidos conforme especificado. E se nenhum novo timestamp é especificado, o touch usa o horário atual.
-Wikipedia
Você pode encontrar informações mais detalhadas sobre o comando touch
(ou qualquer outro comando sobre o qual gostaria de saber) usando o comando man
desta forma:
man touch
O motivo imediato da pergunta é o fato de que a resolução de tempo padrão de ls -l
é em minutos, portanto, uma entrada do sistema de arquivos tocada no mesmo minuto aparecerá exatamente igual na saída ls -l
padrão.
A solução para isso é descrita em link
e basicamente envolve a execução de ls -l --time-style=full-iso
.