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.




