Altera o formato da hora para o comando touch no BSD

3

Eu estou querendo saber como alterar o formato da hora quando estou modificando um tempo com o comando touch no shell c.

Por exemplo, preciso usar

touch -a -t 051512002015 file.txt

Isso alterará o tempo de acesso para 15 de maio de 2015, às 12:00.

O que eu quero fazer é (note que o ano é o primeiro agora)

touch -a -t 201505151200 file.txt

É assim que o toque funciona no Linux. Eu uso UnxUtils no Windows, o que eu tenho quase certeza que usa o toque c-shell. Eu quero que os comandos sejam consistentes. É possível alterar o comando c-shell touch?

    
por Jerron 06.04.2011 / 20:18

2 respostas

3

Isto não é sobre o shell, touch é um programa externo.

Historicamente, havia duas sintaxes para o argumento de data para touch :

touch -t CCYYMMDDhhmm.SS    # CC or CCYY may be omitted; .SS may be omitted
touch MMDDhhmmYY            # YY may be omitted

O comando apareceu em Sétima edição do Unix sem argumento de data. Versões BSD adquiriram a opção -t (com todos os componentes de data em ordem decrescente) em algum lugar por volta de 4.4BSD . O sistema V (por exemplo, SunOS 4.1.3 ) tinha o straight -Data forma com o ano no final. Na época do Single Unix v2 (baseado em POSIX: 1992) , o formulário do System V era considerado obsoleto e não está mais incluído no Single Unix v3 (POSIX: 2001) .

Eu recomendo usar a sintaxe padrão (BSD) no seu script. Nos sistemas legados que exigem a sintaxe BSD, providencie para ter um touch compatível. Várias abordagens são possíveis:

  • Escreva uma função de wrapper que embaralhe os argumentos se detectar que seu script está sendo executado em um sistema legado.
  • Organize para ter um PATH que coloque os diretórios compatíveis com o padrão à frente dos diretórios herdados.
  • (Você pode obter mais conselhos específicos se publicar as variantes e versões legadas exatas que você precisa oferecer suporte.)
por 06.04.2011 / 23:17
1

O comando touch não faz parte de nenhum shell que conheço. Pelo menos de acordo com o meu man page tanto para o tcsh quanto para o bash, o touch não é mencionado. Em vez disso, o toque é o seu próprio comando. O comando touch no Linux e * BSD será um pouco diferente, isso é inevitável, mas você pode escrever um wrapper em torno dele, se necessário. No entanto, à primeira vista, o argumento -t parece ser idêntico tanto na minha máquina Ubuntu Linux quanto na minha máquina FreeBSD. Aqui está o formato de acordo com a página man para o toque no Ubuntu Linux 8.04:

touch [-t [[CC]YY]MMDDhhmm[.ss]]

E na página man no FreeBSD:

touch [-t [[CC]YY]MMDDhhmm[.SS]]

Não sei ao certo onde seu formato de horário para toque vem, mas veja abaixo. A página man do FreeBSD também entra em mais detalhes sobre o significado dessas letras, mas é idêntico ao formato usado pelo comando Ye old date usado no FreeBSD:

date [-jnu] [[[[[CC]YY]MM]DD]hh]mm[.ss]

Na verdade, é o mesmo formato dos dois comandos de toque. Estranhamente, embora no Linux, eles usaram um formato diferente e obscuro no comando date por alguma razão desconhecida:

date [MMDDhhmm[[CC]YY][.ss]]

Eu não tenho idéia porque o Linux coloca o ano para a data entre os minutos e os segundos. Caso não esteja claro, veja o que as letras significam em todos esses comandos:

  • CC - Século (00-99)
  • YY - Ano do Século (00-99)
  • MM - Mês (01-12)
  • DD - Dia do mês (01-31)
  • hh - Hora (00-23)
  • mm - minuto (00 a 59)
  • ss - Segundos (00-61) (sim, 61, não 59)
por 06.04.2011 / 22:37