Linux / Comando touch: criar arquivos e alterar atime e mtime

touch cria um arquivo vazio quando o caminho ainda não existe e, em arquivos existentes, atualiza os horários de acesso e modificação sem apagar o conteúdo. As opções -a e -m selecionam o horário, enquanto -d, -t e -r permitem escolher ou copiar um instante. Ele não define livremente o horário de alteração dos metadados nem o de criação do arquivo.

Os exemplos usam GNU Coreutils e Bash. Confira touch --version, touch --help e man touch no sistema de destino. Prepare a pasta temporária indicada antes das consultas; nenhum exemplo precisa de privilégios de administrador.

O que é o comando touch?

O horário do último acesso é chamado atime; o da última alteração do conteúdo, mtime. O touch muda esses registros sem escrever conteúdo no arquivo. Se o caminho não existir, normalmente cria um arquivo regular de 0 bytes; -c e -h impedem essa criação no GNU.

Sintaxe básica

touch [opções] arquivo ...

Coloque caminhos com espaços entre aspas e, no GNU, use -- antes dos nomes para encerrar as opções. O operando isolado - tem significado especial: refere-se ao arquivo associado à saída padrão. Para criar um arquivo chamado hífen, indique ./-.

Uso básico do touch

Criar um arquivo vazio

Execute o bloco completo no mesmo terminal Bash usado pelos exemplos seguintes. Ele salva a pasta inicial em touch_start, cria uma pasta exclusiva com mktemp e entra nela antes de criar os arquivos. Os comandos ligados por && só continuam após sucesso. Se a preparação falhar, pare e corrija o erro antes de seguir.

touch_start=$PWD
touch_demo=$(mktemp -d "${TMPDIR:-/tmp}/touch-demo.XXXXXX") &&
cd -- "$touch_demo" &&
touch -- notes.txt &&
touch -- file1.txt file2.txt file3.txt &&
touch -- "annual report.txt"

Atualizar os horários para o instante atual

Dentro da pasta preparada, grave um conteúdo de teste no arquivo notes.txt criado acima e fixe uma data antiga para tornar a comparação visível. Depois, execute touch sem data. A consulta stat mostra o tamanho, atime e mtime antes e depois: o tamanho permanece igual e os horários passam do ano de 2020 para o instante da execução.

printf '%s\n' 'Conteúdo de teste.' > notes.txt &&
touch -d '2020-01-01 00:00:00 +0000' -- notes.txt &&
stat -c '%s | %x | %y' -- notes.txt &&
touch -- notes.txt &&
stat -c '%s | %x | %y' -- notes.txt

Manter arquivos ausentes sem criá-los

Use -c, ou --no-create, quando só arquivos existentes devem receber a alteração. Na pasta nova, existing.txt ainda não existe: o comando abaixo não o cria e normalmente retorna sucesso. Por isso, status 0 com -c não confirma que o arquivo exista. Consulte stat -- existing.txt para verificar; nesse exercício, a consulta informa que o arquivo não foi encontrado.

touch -c -- existing.txt

Conferir o resultado

O touch normalmente não imprime mensagem ao funcionar. Na área preparada, crie outro arquivo ainda inexistente e confira seu tamanho:

touch empty-demo.txt
stat -c '%s %n' empty-demo.txt

Exemplo de saída:

0 empty-demo.txt

A saída de 0 bytes só é esperada se empty-demo.txt não existia ou já estava vazio. Se ele contivesse dados, touch preservaria seu tamanho. O guia de stat explica os campos %x (acesso), %y (modificação) e %s (tamanho em bytes).

Opções principais

Opção Propósito
-a Alterar somente o horário de acesso (atime).
-m Alterar somente o horário de modificação do conteúdo (mtime).
-c Não criar nem emitir aviso apenas por o arquivo estar ausente.
-d STRING Interpretar uma data; aceita um fuso explícito.
-t STAMP Usar [[CC]YY]MMDDhhmm[.ss], sujeito ao fuso do ambiente.
-r FILE Copiar atime e mtime de um arquivo de referência.
-h Tentar mudar o próprio link simbólico, sem seguir o destino, quando o sistema oferecer suporte.
--time=WORD Selecionar access/atime/use ou modify/mtime.

As opções longas ajudam a tornar a intenção explícita. Ao transportar um script para outra implementação, confira as opções e os formatos aceitos no destino; não presuma que todos os recursos GNU estejam disponíveis.

Exemplos práticos

Alterar acesso e modificação separadamente

Prepare dois arquivos com a mesma data de 2020. Em seguida, -a altera somente o atime de access-log.txt e -m altera somente o mtime de generated.css, ambos para a data explícita de 2026. O stat permite comparar os dois campos sob o mesmo fuso UTC, o Tempo Universal Coordenado.

touch -d '2020-01-01 00:00:00 +0000' -- access-log.txt generated.css &&
touch -a -d '2026-09-23 05:30:00 +0000' -- access-log.txt &&
touch -m -d '2026-09-23 05:30:00 +0000' -- generated.css &&
TZ=UTC0 stat -c '%n | %x | %y' -- access-log.txt generated.css

Definir uma data e um fuso

Em -t, CCYY é o ano com quatro dígitos, MM o mês, DD o dia, hh a hora de 00 a 23, mm os minutos e ss os segundos opcionais depois do ponto. Prefira o ano completo para evitar a interpretação de anos com dois dígitos.

O primeiro comando usa -d com deslocamento +0900. O segundo usa o formato numérico -t com TZ=UTC0 aplicado apenas àquele comando. Os dois exemplos abaixo representam o mesmo instante: 23 de setembro de 2026, às 05:30 em UTC. Sem TZ, -t segue o fuso do sistema, podendo produzir outro instante.

touch -d '2026-09-23 14:30:00 +0900' -- report.txt &&
TZ=UTC0 stat -c '%y' -- report.txt &&
TZ=UTC0 touch -t 202609230530.00 -- report.txt &&
TZ=UTC0 stat -c '%y' -- report.txt

Copiar atime e mtime de uma referência

Crie reference.txt e dê a ele horários de acesso e modificação diferentes; depois copie os dois para target.txt com -r. O destino pode ser criado se estiver ausente. Na saída, compare cada campo de uma linha com o campo correspondente da outra; ambos os arquivos devem mostrar acesso em 21 de setembro e modificação em 20 de setembro de 2026, às 12:00 UTC.

touch -d '2026-09-20 12:00:00 +0000' -- reference.txt &&
touch -a -d '2026-09-21 12:00:00 +0000' -- reference.txt &&
touch -r reference.txt -- target.txt &&
TZ=UTC0 stat -c '%n | %x | %y' -- reference.txt target.txt

Escolher entre o link e seu destino

Por padrão, touch -- link segue o link simbólico e altera o arquivo apontado. Se o destino estiver ausente, pode criá-lo quando o caminho e as permissões permitirem. Para tentar alterar o link em si, use touch -h -- link; o sistema precisa oferecer suporte. Essa opção não cria arquivos ausentes. touch -ch -- link também evita o aviso de ausência, mas não comprova que algum link tenha sido alterado.

Com -h -r, o GNU também lê os horários do próprio link usado como referência. Sem -h, lê os do arquivo apontado. O guia de readlink ajuda a distinguir o link de seu destino. Esse comportamento e as limitações de suporte estão no manual GNU de touch.

Comparar touch e comandos relacionados

Comando ou método Função principal Quando usar
touch Criar um arquivo vazio ou alterar atime e mtime Preparar arquivos e horários sem escrever conteúdo
truncate Alterar o tamanho lógico de um arquivo Alterar deliberadamente o tamanho, com possível perda de dados
date Exibir e converter datas Calcular datas e escolher sua apresentação
stat Ler metadados de arquivos Conferir metadados antes e depois

Cuidados importantes

Não esvazia um arquivo existente

Executar touch em um arquivo existente preserva os dados. Já truncate -s 0 reduz o arquivo a zero bytes e descarta seu conteúdo: use-o somente quando essa perda for a intenção.

Distinguir ctime e horário de criação

No Linux, ctime registra a alteração do estado dos metadados do inode, a estrutura que descreve o arquivo; não é a data de criação. A mudança de atime ou mtime pode atualizar ctime para o instante atual. O horário de criação, quando o sistema de arquivos o fornece, é outro registro. touch não permite escolher livremente esses dois valores.

Considerar precisão, permissões e dependências

O sistema de arquivos pode arredondar a precisão do horário solicitado. Para definir uma data explícita ou alterar apenas um campo no Linux, em geral é necessário ser dono do arquivo ou ter o privilégio apropriado; atualizar ambos para o instante atual também pode ser permitido a quem tenha acesso de escrita. Pastas ausentes, falta de acesso ao caminho ou um sistema de arquivos somente leitura podem causar falhas. Confira o diagnóstico e o status, em vez de repetir com privilégios maiores sem entender a causa. A documentação Linux de alteração de horários detalha essas condições.

Alterar horários pode forçar ou evitar ações em compilações que comparam datas; não use isso para esconder uma dependência incorreta. Ao terminar a prática, volte à pasta inicial com cd -- "$touch_start". A área temporária permanece disponível para inspeção; nenhum passo exige apagar arquivos reais.

Perguntas frequentes

O comando touch apaga o conteúdo de um arquivo existente?

Não. Ele preserva o conteúdo e o tamanho enquanto altera os timestamps selecionados.

Como evitar criar um arquivo ausente?

Use touch -c -- arquivo. Ele não cria o arquivo ausente; confirme a existência separadamente quando isso for necessário.

Como alterar apenas o tempo de modificação?

Use touch -m -- arquivo. Para mudar somente o acesso, use touch -a -- arquivo.

Posso copiar os carimbos de data e hora de outro arquivo?

Sim. Use touch -r referencia -- destino e verifique os campos com stat. A referência precisa existir e ser acessível.

Documentação oficial