Saída da data da última modificação para outro arquivo?

1

Estou tentando ler o número de linhas em um arquivo e a data da última modificação desse arquivo (por exemplo, se ele foi modificado pela última vez em 18 de janeiro de 2013, deve gerar 2013-01-18 ) e, em seguida, anexar os dados o arquivo de entrada fornecido no formato theFile: 4 lines, modified on 2013-01-18 . Eu tentei armazenar os dois dados em suas próprias variáveis antes de gerar o eco.

#!/bin/sh
totLines=$(wc -l < $1)
modDate=$(date -r $1)
echo $1: $totLines "lines, modified on" $modDate >> $1

O meu método de encontrar a data da última modificação está correto? Foi-me dito que é, mas não consigo descobrir porque, porque não consigo encontrar nenhuma informação sobre o que o date -r faz e não consigo fazê-lo funcionar em qualquer script que eu experimente. Também está usando stat, mas não consigo fazer isso funcionar com stat -c %y $1 , onde obtenho stat: illegal option -- c

    
por Adam 31.01.2013 / 02:57

1 resposta

3

O date -r e esse sabor de stat são específicos do GNU. Talvez você tenha sido informado por um usuário do Linux e esteja usando outro sistema.

Infelizmente, não há um comando padrão para obter essas informações de maneira confiável. O mais portátil que você poderia conseguir seria:

modDate=$(perl -MPOSIX -le '@s=stat shift or die$!;
  print strftime "%Y-%m-%d", localtime $s[9]' -- "$1") || exit

zsh tem seu próprio comando stat incorporado:

zmodload zsh/stat
zstat -F %F +mtime -- "$1"

(esses dois comandos acima, para links simbólicos, retornariam a hora da modificação do destino do symlink como GNU date -r , se você quiser o tempo do symlink (como no seu comando GNU stat ), mude stat a lstat na solução perl ou adicione -L a zstat ).

Além disso, você esqueceu as aspas duplas em torno de suas variáveis e você não deve usar echo para dados arbitrários.

    
por 31.01.2013 / 07:52