Como converter em massa as datas da “última modificação” em um diretório específico?

2

Por exemplo, digamos, sei que minhas compensações de tempo estão desativadas por várias horas (talvez porque o relógio do sistema estivesse algumas horas adiantado em determinado horário). Nesse caso, como eu alteraria em massa as datas da "última modificação" de todos os arquivos em um diretório específico?

Observe que arquivos diferentes precisarão ter seu horário de modificação alterado para valores diferentes.

    
por InquilineKea 22.06.2012 / 06:09

3 respostas

6

Se você quiser aplicar um deslocamento relativo ao tempo de modificação de um arquivo, poderá fazê-lo com uma combinação de touch(1) e stat(1) . touch suporta tempos relativos, mas eles são relativos agora, não a hora atual em um arquivo. Em vez disso, você pode usar stat para obter a hora da modificação atual e aplicar um deslocamento.

Por exemplo, para aplicar um deslocamento de -2 horas à hora da modificação de um arquivo:

touch -m -d @$(( $(stat -c %Y file.txt) - 7200 )) file.txt

stat -c %Y file.txt obtém o tempo de modificação de file.txt como segundos desde a época. Usando bash expansão aritmética , você pode realizar cálculos, que neste caso é subtrair 7200 segundos (2 horas). Usando o toque com -m para alterar a hora da modificação e -d para especificar uma data, você pode definir a hora da modificação para o que foi calculado. O @ é um especificador de formato de hora que diz que o tempo especificado está em segundos desde a época.

Se você colocar isso em um shell script, poderá chamá-lo de find ou xargs , permitindo que você use find para selecionar os arquivos que deseja alterar.

#!/bin/bash
for file ; do
    touch -m -d @$(( $(stat -c %Y "$file") - 7200 )) "$file"
done

Isso aplicará a alteração na hora da modificação de todos os arquivos transmitidos como argumentos.

    
por 22.06.2012 / 08:36
0

Modifique um arquivo manualmente para a hora certa (usando touch ... TEMPLATE ).

Em seguida, altere o restante referenciando esse arquivo (usando touch -r TEMPLATE TARGET ).

    
por 22.06.2012 / 23:22
-1
touch -m -r file.txt -d '-1 hour' file.txt
    
por 31.03.2014 / 17:31