Comando do Linux Touch Directory

7

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
    
por Dragos Rizescu 27.10.2013 / 17:11

4 respostas

7

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.

    
por Jorge Suárez de Lis 27.10.2013 / 17:16
3

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
                              ~~~~~~~~~~~~~
    
por user235510 11.03.2015 / 05:58
2
  

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

    
por Atari911 27.10.2013 / 18:13
1

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 .

    
por Josip Rodin 18.09.2015 / 15:55