Como posso alterar a data de modificação/criação de um arquivo?

Como posso alterar a data de modificação/criação de um arquivo?

Existe uma maneira 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 os carimbos de data/hora de um monte de arquivos para um determinado período de tempo, mais cedo ou mais tarde (por exemplo, +8 horas ou -4 dias, etc.).

Responder1

Contanto que você seja o proprietário do arquivo (ou root), você pode alterar o horário de modificação de um arquivo usando o touchcomando:

touch filename

Por padrão, isso definirá a hora de modificação do arquivo para a hora atual, mas há vários sinalizadores, como o -dsinalizador para escolher uma data específica. Por exemplo, para definir um arquivo como 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 horário de modificação existente, o seguinte deve resolver:

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

Se 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 findpara selecionar apenas os arquivos de seu interesse. Se desejar apenas atualizar os tempos de modificação do arquivo em relação ao horário atual, você pode simplificar isso para:

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

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

No que diz respeito ao tempo de criação, a maioria dos sistemas de arquivos Linux não acompanha esse valor. Existe um ctimeassociado aos arquivos, mas ele rastreia quando os metadados do arquivo foram alterados pela última vez. Se o arquivo nunca tiver suas permissões alteradas, pode acontecer que o horário de criação esteja retido, mas isso é uma coincidência. Alterar explicitamente o horário de modificação do arquivo conta como uma alteração de metadados, portanto também terá o efeito colateral de atualizar o arquivo ctime.

Responder2

Maneira mais fácil - acessado e modificado será o mesmo:

touch -a -m -t 201512180130.09 fileName.ext

Onde:

-a = accessed
-m = modified
-t = timestamp - use [[CC]YY]MMDDhhmm[.ss] time format

Se você deseja usar, NOWbasta descartar o -te o carimbo de data / hora.

Para verificar se são todos iguais: stat fileName.ext

Ver:toque de homem

Responder3

Obrigado pela ajuda. Isso funcionou para mim:

No terminal, vá para o diretório para edição de data. Então digite:

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

Você verá um ">" depois de pressionar Enter, exceto pela última vez -> "concluído".

Nota: você pode querer alterar "201203101513"

"201203101513" = é a data desejada para todos os arquivos deste diretório.

Responder4

Este pequeno script pelo menos funciona para mim:

#!/bin/bash

# find specific files
files=$(find . -type f -name '*.JPG')

# use newline as file separator (handle spaces in filenames)
IFS=$'\n'

for f in ${files}
do
 # read file modification date using stat as seconds
 # adjust date backwards (1 month) using date and print in correct format 
 # change file time using touch
 touch -t $(date -v -1m -r $(stat -f %m  "${f}") +%Y%m%d%H%M.%S) "${f}"
done

informação relacionada