Была такая же проблема. Заметил, что мой VirtualBox не имеет 64-битного Linux в списке опций. Попробуйте зайти в биос и включить технологию виртуализации Intel. Работает на меня.
В скрипте есть строка:
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
Похоже, что это -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.