Утилита FreeBSD date -r меня сбивает с толку

Была такая же проблема. Заметил, что мой VirtualBox не имеет 64-битного Linux в списке опций. Попробуйте зайти в биос и включить технологию виртуализации Intel. Работает на меня.

0
17.05.2016, 15:13
2 ответа

В скрипте есть строка:

date +%d -r "$file"
которая прекрасно работает под linux, но ...

... на FreeBSD/PC-BSD не сработает, потому что команда date разбирает свои командные строки с помощью getopt(), а опции должны строго предшествовать аргументам. Строка формата +%d является аргументом и должна следовать за опцией -r; в противном случае -r не распознается как опция, а рассматривается как (недействительный) аргумент. Обратите внимание, что синопсис команды на странице руководства date показывает их именно в таком порядке.

Да, date рассматривает аргументы опции -r как имена файлов, только если не может декодировать их как числа. Да, это проблема, когда имена файлов являются числами. ☺

Лучшим подходом для чтения времени последней модификации файла/каталога, не заботясь о том, похоже ли его имя на число или нет, была бы команда stat... если бы это не было связано со значительными трудностями.

case "`uname`" in
Linux) stat -c '%y' -- "$1"|cut -c9-10 ;;
*BSD) stat -f '%Sm' -t '%d' -- "$1" ;;
esac
2
28.01.2020, 02:20

Похоже, что это -r использование попало в исходники только 7 мая 2015 года. Возможно, ваша версия еще не делает этого?

Revision 282608 - (view) (download) (annotate) - [select for diffs] 
Modified Thu May 7 20:54:38 2015 UTC (12 months, 1 week ago) by delphij 

date(1): Make -r behave like GNU's version when the option can not be
interpreted as a number, which checks the file's modification time and
use that as the date/time value.
2
28.01.2020, 02:20

Теги

Похожие вопросы