Como posso alterar a data modificada/criada de um arquivo?

Existe alguma forma de alterar a data em que um arquivo foi modificado/criado (que é mostrado no Nautilus ou com o comando ls -l)? Idealmente estou procurando um comando que possa alterar a data/hora de um monte de arquivos para uma certa quantidade de tempo antes ou depois (por exemplo, +8 horas ou -4 dias, etc.).

Desde que você seja o proprietário do arquivo (ou root), você pode alterar o tempo de modificação de um arquivo utilizando o comando touch:

touch filename

Por padrão, isto irá definir a hora de modificação do arquivo's para a hora atual, mas há uma série de flags, como o -d flag para escolher uma determinada data. Assim, por exemplo, para definir um arquivo como sendo modificado duas horas antes do presente, você poderia usar o seguinte:

touch -d "2 hours ago" filename

Se você quiser modificar o arquivo em relação ao seu tempo de modificação existente, o seguinte deve fazer o truque:

touch -d "$(date -R -r filename) - 2 hours" filename

Se você quiser modificar um grande número de arquivos, você pode usar o seguinte:

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

Você pode alterar os argumentos para find para selecionar apenas os arquivos nos quais você está interessado. Se você quiser apenas atualizar os tempos de modificação dos arquivos em relação ao tempo atual, você pode simplificar isso para:

find DIRECTORY -exec touch -d "2 hours ago" {} +

Este formulário é't possível com a versão relativa ao tempo do arquivo porque ele utiliza a shell para formar os argumentos para touch.

No que diz respeito ao tempo de criação, a maioria dos sistemas de arquivo Linux não acompanha este valor. Há um ctime associado a arquivos, mas ele acompanha quando os metadados do arquivo foram alterados pela última vez. Se o ficheiro nunca tem as suas permissões alteradas, pode acontecer de manter o tempo de criação, mas isto é uma coincidência. A alteração explícita do tempo de modificação do arquivo conta como uma alteração de metadados, portanto, também terá o efeito colateral de atualizar o `ctime'.

Comentários (12)

Obrigado pela ajuda. Isto funcionou para mim:

No terminal, vá para o diretório de edição de datas. Em seguida, digite:

find -print | while read filename; do
    # do whatever you want with the file
    touch -t 201203101513 "$filename"
done

Você verá um "">" depois de bater enter, exceto pela última vez -> "feito".

Nota: Você pode querer mudar "201203101513"

"201203101513" = é a data que você quer para todos os arquivos deste diretório.

Ver a minha página web

Comentários (2)

basta alterar a data e a hora nas configurações. depois salve seu arquivo, ele muda automaticamente

Comentários (5)