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 touch
comando:
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 -d
sinalizador 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 find
para 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 ctime
associado 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, NOW
basta descartar o -t
e 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