O que o comando 'toca' 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
O que o comando 'toca' 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
Respostas:
Conforme declarado na página de manual , o principal uso touch
é o seguinte:
Atualize os tempos de acesso e modificação de cada ARQUIVO para o horário atual.
Portanto, ele atualiza os tempos de acesso e modificação do diretório.
O exemplo na parte superior não deixa claro que "touch" define o horário do diretório (o novo horário na lista era o mesmo que o original, simplesmente porque o toque ocorreu logo após a criação do diretório) .. Sim, a definição de "ARQUIVO" na documentação inclui diretórios, para que você possa usar o toque para alterar os carimbos de data e hora, MAS ...
Existem algumas situações em que você não pode alterar o carimbo de data e hora de um diretório (para alguns tipos de diretórios montados remotamente), mesmo se você tiver 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 Unix padrão usado para alterar os carimbos de data e hora de acesso e modificação de um arquivo. Também é usado para criar um novo arquivo vazio.A Especificação Unix Única (SUS) especifica que o toque deve alterar os tempos de acesso, tempos de modificação ou ambos, para um arquivo. O arquivo é identificado por um nome de caminho fornecido como um único argumento. Ele também especifica que, se o arquivo identificado não existir, ele será criado e os tempos de acesso e modificação serão definidos conforme especificado. Se nenhum novo registro de data e hora for especificado, o toque usa a hora atual.
-Wikipedia
Você pode encontrar informações mais detalhadas sobre o touch
comando (ou qualquer outro comando que você gostaria de saber) usando o man
comando da seguinte maneira:
man touch
A razão imediata para a pergunta é o fato de que a resolução padrão de tempo ls -l
é em minutos; portanto, uma entrada do sistema de arquivos tocada no mesmo minuto aparecerá exatamente a mesma na ls -l
saída padrão .
A solução para isso é descrita em /superuser/355318/how-to-have-linux-ls-command-show-second-in-time-stamp
e basicamente envolve a execução ls -l --time-style=full-iso
.