The script has a line along:
date +%d -r "$file"
which works fine under linux, but …
… no FreeBSD / PC-BSD falhará porque o comando date
analisa suas linhas de comando com getopt()
e as opções devem preceder estritamente os argumentos. A string de formato +%d
é um argumento e deve seguir a opção -r
; caso contrário, -r
não é reconhecido como uma opção, mas tratado como um argumento (inválido). Observe que a sinopse do comando na página de manual date
exibe-os nesta mesma ordem.
Sim, date
trata os argumentos da opção como -r
como nomes de arquivos apenas quando não pode decodificá-los como números. Sim, isso é um problema quando os nomes dos arquivos são números. ☺
Uma abordagem melhor para ler a hora da última modificação de um arquivo / diretório, sem se preocupar se seu nome se assemelhava a um número ou não, seria o comando stat
... não tinha dificuldades significativas.
case "'uname'" in
Linux) stat -c '%y' -- "$1"|cut -c9-10 ;;
*BSD) stat -f '%Sm' -t '%d' -- "$1" ;;
esac