cur opção para preservar tempos de arquivo durante um achado / substituição?

2

Estou tentando modificar alguns arquivos do Autotool porque um projeto não está honrando meus CFLAGS , CXXFLAGS e LDFLAGS . Localizei algumas áreas em que provavelmente poderia fazer a alteração com um grep para libtool: link . Quando eu ajustei os arquivos do Autotool:

$ sed -i "" 's|$CC -dynamiclib|$CC -dynamiclib -force_cpusubtype_ALL|g' configure configure.ac

Isso resultou em:

WARNING: 'aclocal-1.14' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127

touch -t 19700101 configure.ac não resolveu o problema.

Estou em um sistema OS X antigo e não possui as ferramentas desejadas pelas ferramentas. Eu usei as sed(1) man pages , mas não vejo uma opção para preservar os tempos de arquivo.

Como eu instruo o sed a preservar os tempos de arquivo?

    
por jww 31.08.2015 / 08:49

1 resposta

1
Não é provável que sed que em qualquer implementação. O comando

touch -t 19700101 configure.ac

informa touch para definir o timestamp para uma data falsa (porque apenas 8 dígitos são fornecidos) usando

  • MM = 19
  • DD = 70
  • hh = 01
  • mm = 01

Você provavelmente pretendia

touch -t 197001010000 configure.ac

(8 dígitos para 19700101, mais 4 dígitos para 0000), embora você possa ter problemas de fuso horário com isso. Em qualquer caso, é improvável que seja necessário redefinir o registro de data e hora de um arquivo até o momento. Eu simplesmente redefiniria o valor original.

Por exemplo (geralmente faço isso com cpd ), pode-se escrever um script para copie o registro de data e hora do arquivo original para o arquivo editado. Aqui está um exemplo de script que funciona para o OSX:

#!/bin/sh
usage() {
    echo "usage: $0 source target" >&2
    exit 1
}

[ $# = 2 ] || usage

[ -L "$1" ] && usage
[ -L "$2" ] && usage

[ -f "$1" ] || usage
[ -f "$2" ] || usage

SOURCE=$(stat -t "%Y%m%d%H%M.%S" -f "%Sm" "$1")
ls -l $2
touch -t "$SOURCE" "$2"
ls -l $2

Curiosamente (a linha de comando stat é não padronizada), a versão OSX de stat é mais adequado para esta aplicação em particular do que o Linux stat . Para o Linux, pode-se fazer algo semelhante obtendo o registro de data e hora de uma listagem ls -l e usando a opção -d não padrão de touch para aplicar o carimbo de data / hora.

    
por 31.08.2015 / 10:10